2013-01-06 3 views
1

:다형성 constructor.name 속성 액세스

function Parent() { ... } 
function Child() { ... } 

Child.prototype = new Parent(); 

// toString implementation on the parent object 
Parent.prototype.toString = function() { 
    return this.constructor.name; 
} 

// And the code: 
alert(new Child()); 

... 원하는 결과가 다시 (부모 toString 구현 내부의 constructor.name을 "아이"문자열을 얻을 수 있습니다 출력됩니다 "부모" 자식 생성자 이름을 반환해야합니다.

JavaScript로 가능합니까? 당신이 코드의 결과에서 볼 수

+1

는'constructor'는 : 인스턴스의 prototype_을 만든 개체 함수에 대한 참조를 _Returns. 그래서 정확히 무엇을해야하는지, 당신은 다른 기능 ('constructor'이 아닌)을 찾고 있습니다. 고전 스타일 하위 분류를 모방하는 기사가 많이 있습니다. 원하는 경우 더 간단하게 기생하는 상속 경로를 사용할 수도 있습니다. –

답변

0

일관되지는 당신이 Object.getPrototypeOf(Child)와 아이의 프로토 타입 객체를 선택하면 가지가 모두 당신이 function Empty(){} 수 있도록 프로토 타입 객체의 밀회를 해결하는 대신의 Child.prototype = new Parent(); .second의 Child.__proto__ = new Parent()를 사용해야 두에 의해 발생 모든 프로토 타입 체인의 문제. 새 지정 후 Object.getPrototypeOf(Child)의 결과가 표시되면 부모 프로토 타입 toString() 메서드를 정의하지 않은 경우 ()을 얻습니다. 있으면 부모 (Child prototype) prototype toString() 메서드) 이는 Child가 이라는 객체 (프로토 타입 속성에)를 가지고 있다는 것을 의미합니다. 당신은 세 가지 선택이 그 때는 :

1.assign toString()를 아동에 대한 방법은 자체 객체 :

Child.toString = function(){ return this.name } 

을이 경우에 당신이 때문에 생성자 변경되었습니다 프로토 타입 대입 한 후 this.constructor.name를 사용하지 말아야합니다 학부모.

2.define 아이 프로토 타입 (부모) toString() 메소드 :

Child.__proto__.toString = function(){ return this.name } 

3.define 아이가가 프로토 타입> 프로토 타입 (Object)을 toString() 메소드 :(재정)

Parent.prototype.toString = function(){ return this.name } 

일부 관측 : 나는 엉덩이에 대한 __proto__을 사용

1. 이유 시작 시점에서 객체의 생성자 함수의 원형 프로토 타입 속성에 액세스하여이를 변경하려고했습니다.

2. return this.name을 사용했습니다.이 메서드는 자식에서 호출되므로 자식 개체를 참조하기 때문에 사용했습니다. 내가 옵션 3옵션 2prototype__proto__을 사용

3. 이유는 Object 생성자가 변경되지 않은 경우 우리는 Object 생성자가 변경 __proto__prototype을 사용하는 것입니다.

4. toString() 메서드를 테스트하려면 대신 alert(Child)을 사용해야합니다.이 답변의

http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/

모든 측면은 크롬 JS 콘솔을 사용하여 테스트 : 여기

당신에게 프로토 타입에 대한 많은 도움이 기사입니다.

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/constructor에서