JS 원형 디자인 모델 (4) 의 결함 (1)

7889 단어 수필
앞의 세 편 에서 소개 한 것 은 모두 원형 디자인 모델 의 장점 이다. 오늘 은 원형 모델 의 단점 을 말한다. 1. 구조 함 수 는 손 으로 써 야 하 는 것 을 가리킨다. 2. 인용 유형 에 있어 공유 문제 가 있 는 오류 이다.
var Person = function () {
    this.class='ddd';
    this.toString=function(){};
};
Person.prototype.name = 'tlc';
Person.prototype.age = '25';
Person.prototype.sex = 'boy';
Person.prototype.sayInfo = function () {
    console.info(this.name + "--" + this.age + "--" + this.sex)
};
원형 대상 에 속성 이나 방법 을 추가 할 때마다 Person. prototype 필드 를 다시 써 야 합 니 다. 이러한 쓰기 방법 은 너무 복잡 하기 때문에 Person. prototype 을 대상 에 게 가리 킬 수 있 습 니 다. 이 대상 에는 필요 한 속성 과 방법 이 포함 되 어 있 습 니 다.
var Person = function () {
};
Person.prototype = {
    name: 'tlc',
    age: '19',
    sex: 'boy',
    sayInfo: function () {
        console.info(this.name + "--" + this.age + "--" + this.sex)
    }
};
그래서 원형 대상 의 constructor 지향 은 Person 이 아 닌 문제 가 발생 했 습 니 다. 상기 코드 는 원형 대상 을 다시 쓰 는 것 과 같 기 때문에 js 에서 함 수 를 만 들 때마다 원형 대상 을 만 들 기 때문에 상기 코드 후의 constructor 는 새로 만 든 대상 constructor 를 가리 키 고 있 습 니 다.
var person1 = new Person();
console.log(person1.constructor == Person);//false
console.info(person1.constructor == Object);//true
constructor 속성 을 수 동 으로 추가 할 수 있 지만 이 속성 은 매 거 할 수 있 습 니 다. 이 속성 을 매 거 하지 않 으 려 면 define Property 방법 을 사용 한 후에 이 속성 을 매 거 할 수 없습니다.
Person.prototype = {
    constructor:Person,
    name: 'tlc',
    age: '19',
    sex: 'boy',
    sayInfo: function () {
        console.info(this.name + "--" + this.age + "--" + this.sex)
    }
};
var person1 = new Person();
console.log(person1.constructor == Person);//true
console.info(person1.constructor == Object);//false
Object.defineProperty(Person.prototype,'constructor',{
    enumerable:false,
    value:Person
});

좋은 웹페이지 즐겨찾기