프로토타입 재해해 노트

2015 단어
우리가 만든 모든 함수에는 원형 속성이 있는데 이 속성은 하나의 바늘로 하나의 대상을 가리킨다(이 대상은 원형 대상이라고 부른다).이 대상의 용도는 특정 유형의 모든 실례가 공유할 수 있는 속성과 방법을 포함하는 것이다.원형 대상을 사용하는 장점은 모든 대상이 포함된 속성과 방법을 실례적으로 공유할 수 있다는 것이다.
실례에 대한 포인터 ([prototype]])
구조 함수를 호출하여 새로운 실례를 만들면 (new 키워드로 얻은 것은 하나의 대상) 실례 내부에 포인터 ([prototype]]) 를 포함하고 포인터는 구조 함수의 원형 대상을 가리킨다.
구조 함수 실례 후의 실례 대상의 바늘([[prototype]])은 접근할 수 없지만 Firefox, Safari, Chrome는 대상마다 하나의 속성__proto__을 지원한다.스크립트에서 이 속성은 보이지 않습니다.
isPrototypeOf () 방법은 실례 지침과 구조 함수의 원형 대상 간의 관계, 그리고 한 대상이 다른 대상의 원형 체인에 있는지 확인할 수 있다.
Person.prototype.isPrototypeOf(person1);  
Object.getPrototypeOf () 이 새로운 방법은 실례의 대상에 있는 바늘 ([prototype]) 이 가리키는 원형 대상을 되돌려줍니다.
Object.getPrototypOf(person1) === Person.prototype;
구조 함수 속성 정보
기본적으로 모든 원형 대상은 자동으로 구조 함수 (constructor) 속성을 가져옵니다.이 속성은 구조 함수를 가리키는 바늘을 포함한다.
사용자 정의 구조 함수를 만들면 원형 대상은 기본적으로constructor 속성만 얻을 수 있고, 다른 속성과 방법은 Object에 계승됩니다.
기타
실례 대상을 통해 원형의 값에 접근할 수 있으나 실례를 통해 원형의 값을 다시 쓸 수 없다.만약에 실례에 원형과 같은 이름의 속성을 추가하면 프로그램은 실례에서 이 속성을 만들고 원형의 같은 이름의 속성을 차단한다.같은 이름의 속성을null로 설정해도 방문할 때 실례에 있는 이 속성으로 원형을 가리키는 체인을 되돌려주지 않습니다.delete 속성을 사용하면 실례의 동명 속성을 삭제할 수 있습니다.
delete person1.name;  // person1 name 
hasOwnProperty()를 사용하여 속성이 인스턴스인지 원형인지 확인합니다.
person1.hasOwnproperty('name');  //name person1 
원형이 인용 유형 값의 속성을 포함하면 실례에서 이 속성을 수정하면 원형에서 반응한다.
function Person() {};
Person.prototype = {
    constructor: Person,
    arr: ['zhang', 'wang', 'li']
};

var person1 = new Person();
var person2 = new Person();
person1.arr.push('zao');
console.log(person1.arr === person2.arr); // true
대상의 글씨체를 재는 방법으로 원형 대상을 다시 쓰기;원형 대상의 constructor 속성은 더 이상 Person을 가리키지 않습니다. constructor의 지향을 수동으로 설정해야 합니다. (현재 다시 쓴 원형 대상의 constructor 속성은 Object의 구조 함수를 가리킵니다)
in조작부호, in조작부호는 대상이 어떤 속성에 접근할 수 있도록true를 되돌려줍니다. 대상이 아무리 실례적이든 원형이든.
'name' in person1;  // false

좋은 웹페이지 즐겨찾기