我正在和一位同事討論Javascript OO策略/模式,並且從我讀過的大多數教程中討論了建立原型/繼承關係的常用方法兩個構造函數(帶參數)是將一個原型分配給子函數。JavaScript繼承:在構造函數中使用__proto__而不是構造函數的prototype屬性
例如:
var MyParentClass = function(arg1) { ... };
var MyChildClass = function(arg1, arg2) {
MyParentClass.apply(this, arguments);
...
};
MyChildClass.prototype = new MyParentClass;
這裏的一個問題是,該參數可能是不同的順序,或者改變名稱等,且上文的實例確實需要兩(2)單獨的語句來建立關係(apply()語句和.prototype statemetn)。
我的同事建議這種方法代替:
var MyParentClass = function(arg1) { ... };
var MyChildClass = function(arg1, arg2) {
this.__proto__ = new MyParentClass(arg2);
...
};
這種方法是短,提供了更多的靈活性,朝向參數傳遞給parent constructor
。
除非我遺漏了一些東西,似乎這應該是建立JavaScript類之間繼承關係的事實上的模式,所以我很好奇爲什麼我從來沒有在所有JavaScript OO教程中遇到過這種模式遠。任何人都可以讓我知道,如果上述策略有任何缺點?
因爲'__proto__'是非標準的,過時,不應該使用。 – elclanrs
也因爲你在每個實例上分別設置'__proto__',所以'instance1 .__ proto__!== instance2 .__ proto__'。 –
@JamesAllardice在這種情況下,它是所需的行爲,如果我是正確的,我們不希望兩個實例指向相同的原型實例。例如,如果Parent是Person,Child是Employee,我們希望每個Employee的原型對象也是一個單獨的Person實例。然而,我誤解了什麼? – hbCyber