2015-01-15 3 views
0

Ember.js에서 부모 개체 생성자는 어떻게 액세스합니까? 정확한 값을 산출Ember.js 개체의 부모 생성자에 액세스

this.__ember_meta__.proto.__proto__.__proto__.constructor 

을, 그러나 그것은 명백해야한다 이유로 받아 들일 수있다 : 주위를 파고 동안이를 발견했다.

extend() 메소드의 코드를 보면, 부모 클래스를 superclass이라는 속성에 할당하는 것처럼 보입니다.하지만 내 수업에서 그 이유가 무엇인지 알 수 없습니다.

답변

1

definition of the extend method에서 보면 Class이라는 변수를 만들고 반환하는 것을 볼 수 있습니다. 메서드가 Class (즉, this.prototype === Class.prototype)에서 실행중인 것으로 묘사해야합니다. , 또한 부모의 생성자를

proto = Class.prototype = o_create(this.prototype); 
proto.constructor = Class; 


그래서 당신이 this.constructor를 사용하여이 Class 액세스 할 수 있으며 염두에두고


,이 Class 자체가 Class.prototype.constructor에 할당되고 있음을 볼 수있다 등급이 .superclass 속성에 할당 된 것입니다 (Class) :

Class.superclass = this; 


그래서 나는 당신이 찾는 대답은 간단하다고 생각 :

this.constructor.superclass 

가 관찰 : http://jsfiddle.net/99gvpqzx/1/

+0

감사 jsfiddle을 위해 ... 내가 그렇지 않으면 당신을 믿지 않았을 것이다. Ember 1.7.1 (내가 실행하고있는 버전)과 최신 버전 사이에서 동작이 변경된 것 같습니다. Ember 1.7.1은'this.constructor.superclass'는'this.constructor'와 동일하다고 주장합니다! http://jsfiddle.net/99gvpqzx/2/ –

+0

@LukeTheObscure 아주 옳지 않은 것처럼 보입니다. 귀하의 버전에서는 원래 클래스가'this.constructor.superclass.superclass' (두 개의'.superclass'es)로 접근 할 수있는 것처럼 보입니다. 이전 버전의'extend()'연산은 새로운 버전에 비해 상속 계층을 하나 더 도입했다고 생각합니다 : http://jsfiddle.net/99gvpqzx/2/ – JLRishe

관련 문제