[英]Javascript Prototypal inheritance
我正在閱讀Alex Maccaw的Javascript Web Applications。 以下是構建Class構造函數的代碼段。
var Class = function(parent){
var klass = function(){
this.init.apply(this, arguments);
};
// Change klass' prototype
if (parent) {
var subclass = function() { };
subclass.prototype = parent.prototype;
klass.prototype = new subclass;
};
klass.prototype.init = function(){};
// Shortcuts
klass.fn = klass.prototype;
klass.fn.parent = klass;
klass._super = klass.__proto__;
/* include/extend code... */
return klass;
};
我感興趣的是
var subclass = function() { };
subclass.prototype = parent.prototype;
klass.prototype = new subclass;
他為什么不去
klass.prototype = parent.prototype;
他解釋說:“圍繞創建臨時匿名函數的這種小動作阻止了在繼承類時創建實例”。 這對我來說仍然沒有意義,怎么會
klass.prototype = parent.prototype;
創建實例?
因為那樣的話,您放在klass.prototype
上的klass.prototype
也將都放在parent.prototype
因為它們是同一對象。
他正在做的是創建一個從parent.prototype
繼承的新對象,並將該對象分配給klass.prototype
,以便添加到該對象的任何屬性都不會放在parent.prototype
。
僅供參考,一種更現代的方法是使用Object.create()
klass.prototype = Object.create(parent.prototype);
這基本上完成了同一件事。
您指出的這句話:
“”圍繞創建臨時匿名函數的這種小動作阻止了在繼承類時創建實例“
...是一種奇怪的解釋方式,除非在更大的上下文中有意義。 也許他的意思是說,您不需要調用parent
構造函數即可獲取從parent.prototype
繼承的對象。
如果您這樣做:
klass.prototype = new parent();
它會完成相同的事情,除了將調用parent
構造函數,並且這樣做可能會有不良的副作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.