2012-03-01 5 views
2
var Person = function(name, age){ 
    return Object.create(Object.prototype, { 
     name: { 
      value: name | "", 
      writable: true, 
      enumerable: true, 
      configurable: true 
     }, 
     age: { 
      value: age | "", 
      writable: true, 
      enumerable: true, 
      configurable: true 
     } 
    }); 
}; 

var Boy = function(name, age){ 
    return Object.create(Person(name, age), { 
     gender: { 
      value: "male" 
     } 
    }); 
}; 

var p = Person("John", 28); 
var b = Boy(); 

console.log(p.isPrototypeOf(b)); // false? 

나는 object.create 이해하려고 노력하고있어 최선의 방법은 new 키워드 생성자의 사용을 피하는 사용할 수 있습니다. 지금까지 나는 위와 같이 접근하고있다. (최선의 방법은 아니지만 시행 착오일지도 모른다.) object.create을 사용하면 더 이상 instanceof과 객체 유형을 확인할 수 없다.자바 스크립트 object.create 및 isPrototypeOf는

누군가가 isPrototypeOf를 사용하여 확인을 제안했습니다. 위의 코드에서 위의 코드가 잘못되었을 때 false이 반환됩니다.

아무도 내가 잘못 가고 있다고 설명 할만큼 친절하지 않습니까? 나는 자바 스크립트에서 프로토 타입 상속을 처음 사용하고있다.

답변

2

물론 p는 b의 프로토 타입이 아닙니다.

Person 함수가 매번 새로운 객체를 반환하기 때문입니다.

var Boy = function(person, name, age){ 
    return Object.create(person, { 
     gender: { 
      value: "male" 
     } 
    }); 
}; 


var p = Person("John", 28); 
var b = Boy(p); 
assert(p.isPrototypeOf(b)) 
다음 시도