1. 程式人生 > >JS建立物件之動態原型模式

JS建立物件之動態原型模式

有其他OO主講經驗的開發人員在看到獨立的建構函式和原型時,很可能會感到非常困惑。動態原型模式正是致力於解決這個問題的一個方案,它把所有資訊都封裝在了一個建構函式中,而通過在建構函式中初始化原型(僅在必要的情況下),又保持了同時使用建構函式和原型的優點。換句話說,可以通過檢某個應該存在的方法是否有效,來決定是否需要初始化原型。來看一個例子。

function Person(name, age, job) {
    //屬性
    this.name = name;
    this.age = age;
    this.job = job;


    // 方法
    if(typeof
this.sayName != 'function') { Person.prototyep.sayName = function(){ alert(this.name); } } } var friend = new Person('Nicholas', 29, 'Software Engineer'); friend.sayName();

注意建構函式程式碼中加粗的部分,這裡只在sayName()方法不存在的情況下,才會將它新增到原型中。這段程式碼只會在初次呼叫建構函式時才會執行。此後,原型已經完成初始化,不需要再做什麼修改了。不過要記住,這裡對原型所有的修改,能夠立即在所有例項中得到反映。因此,這種方法確實可以說非常完美,其中,if語句檢查的可以是初始化之後應該在任何屬性或方法—–不必用一大堆if語句檢查每個屬性和每個方法;只要檢查其中一個即可。對於採用這種模式建立的物件,還可以使用instranceof操作符確定它的型別。

使用動態原型模式時,不能使用物件字面量重寫原型。前面已經解釋過了,如果已經建立了例項的情況下重寫原型,那麼就會切斷與現有例項與新原型之間的聯絡。