나는 새로운 개체를 만들 때 나 프로토 타입 객체를 선택할 수 있도록하는 방법이 (복사 "자바 스크립트 : 좋은 부품"책) :자바 스크립트 프로토 타입 동작
이제Object.create = function(o) {
var F = function() {};
F.prototype=o;
return new F();
}
말을, 내가 가진 객체 :
var car = {
model: "Nissan"
};
그리고 나는 "만들기"방법을 사용하여,이 개체를 기반으로 새로운 객체를 생성 :
var car1 = Object.create(car);
을 그런 다음 자동차에 속성을 추가 할 수 있으며 동적으로 car1 (동적 프로토 타이핑)에 추가됩니다. 그래서 예를 들면 다음과 같습니다
car.year=2011; // Gets added to "car"...
alert(car1.year); // ... Is also avaialable to car1
Q1)이 문제는 "년"이 car1 사용할 수 있습니다 이유는 자동차의 프로토 타입에 추가되었다 있음을 나타냅니다. 이 올바른지? 그렇지 않다면 "연도"가 추가되고 왜 "자동차"와 "car1"모두에서 사용할 수 있습니까?
또한 위임 규칙에 따라 객체에서 메소드를 찾을 수없는 경우 프로토 타입을 검색 한 다음 Object.prototype에 도달 할 때까지 체인의 모든 프로토 타입을 검사합니다. 이제 다음과 같이 입력하면됩니다.
Object.prototype.originCountry = "Japan";
alert(car.originCountry); // Outputs Japan
alert(car1.originCountry); // Outputs Japan
지금까지 그렇게 좋았습니다. 그러나, 나는 할 경우 :
Object.carColor= "White";
alert(car.carColor); // Error!
나는 "차"( 예를 들어 위의 car.year을 볼 수있는 속성을 추가 할 때 Q2)는 자동차의 프로토 타입에 추가됩니다 그러나, 나는에 속성을 추가 할 때. 객체는, 그것의 프로토 타입 객체에 추가 얻을 경우? 프로토 타입의 객체에 추가되지 않습니다, 왜 대표단의 규칙에 따라, "차"로 그것을 사용할 수 없습니다?
왜 이런 일이 무엇입니까?
나는 그 행동이 그 속성이 프로토 타입에 만들어 졌기 때문에 그것이 객체 자체에서 생성하려고 시도했을 때 그는 정의되지 않은 것을 던지고 프로토 타입을 통해 속성을 만들 때마다 그 프로토 타입으로 생성 된 모든 요소를 만든다고 생각합니다. 그것을 상속한다. –
당신의 Q2가 잘못 시작되었습니다 : 당신은'car'의 프로토 타입에 아무것도 추가하지 않았고, 당신은'car1'의 프로토 타입에 추가했습니다 (이것은'car'가 될 것입니다). – searlea