2015-01-15 68 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)。


考慮到這一點,你可以看到這個Class本身被分配到Class.prototype.constructor

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


所以你可以使用this.constructor訪問此Class,而且,家長的構造類正在(正如您注意到的)分配給Class.superclass屬性:

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