我正在使用Prototypical Inheritance的JavaScript項目。我決定使用它的方式如下:Prototypical Inheritance調用構造函數兩次
var MySuperClass = function (param) {
this.prop = param;
};
MySuperClass.prototype.myFunc = function() {
console.log(this.prop);
};
var MySubClass = function (param) {
MySuperClass.call(this, param);
};
MySubClass.prototype = new MySuperClass();
MySubClass.prototype.constructor = MySubClass;
var obj = new MySubClass('value');
obj.myFunc();
重點在於繼承。
問題是,如果我在每個類(super和sub)的構造函數中放置一個console.log,超級類會被調用兩次,一旦它被傳遞到子類MySubClass.prototype = new MySuperClass();
參數,並且在子類的構造函數中「構造函數被盜」時使用參數。
這可能會導致錯誤,如果我然後嘗試保存這些參數(這意味着我必須添加邏輯來處理空的參數)。
現在,如果我這樣做:
var MySubClass = function (param) {
MySuperClass.call(this, param);
};
MySubClass.prototype = MySuperClass;
MySubClass.prototype.constructor = MySubClass;
似乎一切都正常工作,但我從來沒有見過任何人這樣做(在我Googl'ing)。
任何人都可以向我解釋第二個是不正確的(它似乎類似於Crockford繼承功能)以及如何解決第一個問題,如果它是請不要兩次?
可能的重複[在這裏使用'new'關鍵字的原因是什麼?](http://stackoverflow.com/questions/12592913/what-is-the-reason-to-use -the-new-keyword-here) – Bergi