2017-11-16 17 views
0

1.1 : x에 직접 액세스하면 linkingObject에 액세스 할 수 없지만 linkingObject.prototype에 액세스하는 이유는 무엇입니까?프로토 타입 액세스 및 동작

1.2 : x에 대해 linkingObject을 검색하면 엔진이 기본적으로 설정되어 있지 않아야 x이라는 프로토 타입을 검색 할 수 있습니까? .prototype을 명시 적으로 명시해야하는 이유는 무엇입니까?

1.3 : 이것이 이상하다는 것을 더 자세히 설명하기 위해 baseObjectlinkingObject의 프로토 타입이며 x 속성이 포함되어 있음을 알 수 있습니다.

const baseObject = function() {}; 

baseObject.prototype.x = 5; 

const linkingObject = Object.create(baseObject); 

console.log(linkingObject.x); // 1.1: undefined 
console.log(linkingObject.prototype.x); // 1.2: 5 
console.log(linkingObject.prototype); // 1.3: baseObject { x:5 } 
+1

함수 개체를 상속하고 있습니다. 그러지 마라, 그건 이상한 일이야. 당신은''const baseObject = {x : 5}'와'.prototype' 속성 ('new'와 함께 사용되는 생성자에만 관련이 있습니다)을 원합니다. – Bergi

답변

0

당신은 객체의 상속 체인의 첫 번째 항목으로 함수 객체의 prototype 속성을 혼동했다. 후자는 종종 [[prototype]]으로 작성됩니다. 왜냐하면 상속 체인의 시작을 나타내는 내부 값이기 때문입니다.

개체의 [[prototype]] 내부 속성 ("슬롯"이라고 함)은 해당 생성자의 prototype 속성 또는 Object.create으로 만든 개체의 경우 첫 번째 인수로 제공된 개체 값으로 설정됩니다.

linkingObject의 [[prototype]] 값을 baseObject으로 설정합니다. linkingObject을 검색하면 상속 체인 (baseObject의 속성)에서 prototype을 찾은 다음 상속 된 prototype 값의 정의 된 속성으로 linkingObject.prototype.x을 찾습니다.

그러나 baseObject는 기능이 너무 undefined을 반환 존재하지 않는 linkingObject.x 속성에 대한 검색, x 특성 자체가 없습니다.