1. 프로토 타입 상속의 기원 :
Crockford는 상속을 구현하는 방법을 도입했습니다.이 방법은 엄격한 의미에서 생성자를 사용하지 않고 프로토 타입을 사용하여 사용자 정의 형식을 만들지 않고도 기존 개체를 기반으로 새 개체를 만듭니다.
주어진 기능은 다음과 같습니다.
function Object(o){
// 临时性的构造函数
function F() {}
F.prototype = o;
return new F();
}
설명:
(1) 객체 함수 내에서 먼저 임시 생성자를 생성 한 다음 전달 된 객체를 생성자의 프로토 타입으로 사용합니다. (2) 마지막은이 임시 유형의 새 인스턴스를 반환합니다.
(3) 본질적으로 object ()는 전달 된 객체의 얕은 복사를 수행합니다.
2. 프로토 타입 상속 :
예는 다음과 같습니다.
function Object(o){
// 临时性的构造函数
function F() {}
F.prototype = o;
return new F();
}
var person = {
name:"萝卜头",
friends:["1","2","3"]
};
var anotherPerson = Object(person);
anotherPerson.name="大萝卜头";
anotherPerson.friends.push("5");
var anotherPerson2 = Object(person);
anotherPerson2.name="萝卜干";
anotherPerson2.friends.push("7");
console.log(person.friends);
코드 설명 :
이 예제에서는 다른 개체의 기반으로 사용할 수있는 사람 개체가 Object 함수에 전달 된 다음 함수가 새 개체를 반환합니다. 이 새로운 객체는 사람을 프로토 타입으로 가지므로 프로토 타입에는 기본 유형 값 속성과 참조 유형 값 속성이 포함됩니다. person.friends는 사람의 소유 일뿐만 아니라 anotherPerson 및 anotherPerson2도 공유합니다.
참고 : 이러한 종류의 프로토 타입 상속을 위해서는 다른 객체의 기초로 사용할 수있는 객체가 있어야합니다 . 이러한 객체가 있으면 object () 함수에 전달한 다음 얻은 객체에 하나의 수정 사항을 추가 할 수 있습니다. 특정 요구에 따라.
3. 개선 :
ES5는 새로운 Object.create () 메서드를 통해 프로토 타입 상속 을 표준화합니다. 이 메서드는 새 개체의 프로토 타입으로 사용되는 개체와 새 개체의 추가 속성을 정의하는 개체의 두 매개 변수를받습니다.
var person = {
name:"萝卜头",
friends:["1","2","3"]
};
var anotherPerson = Object.create(person,{
name:{
value:"大萝卜头"
}
});
anotherPerson.friends.push("5");
var anotherPerson2 = Object.create(person,{
name:{
value:"萝卜干"
}
});
anotherPerson2.friends.push("7");
console.log(person.friends);
프로토 타입 상속은 한 개체를 다른 개체와 유사하게 만들고 싶을 때 좋은 선택입니다. 그러나 참조 유형 값을 포함하는 속성은 프로토 타입 패턴을 사용하는 것처럼 항상 원하는 값을 공유합니다.
참고 : 자세한 내용은 "JavaScript 고급 프로그래밍"을 참조하십시오.