2013-07-28 52 views
0

我試圖通過使用for循環一次向對象添加多個方法。通過JavaScript中的循環在對象的原型中添加方法

我所擁有的是一個數組,其中包含點擊,加載等幾個事件的名稱在數組中,因此,將這些事件插入到我的庫對象中真的很容易。但是,我無法通過循環將方法添加到我的對象中。

這裏是我的代碼:

function(something) myLibrary { 

if(this === window) {return new myLibrary } 

this.e = document.getElementById(something); 

} 

var eventsArr = ['click','load','drag','drop']; 

var addEventToProto = function (method) { 

    if(!myLibrary.hasOwnProperty(method)) { 
     myLibrary.prototype[method] = function (fn) { addEventListener(this.e, method, fn); }; 
    } 

}; 

for (i = 0; i < eventsArr.length; i += 1) { 
    addEventToProto(eventsArr[i]); 
}; 

如果您需要更多的信息,那麼請發表評論。

+0

對不起,忘了編輯代碼。 – akash4eva

+0

'myLibrary'是一個對象,而不是一個函數。它沒有名爲'prototype'的屬性。 – basilikum

+0

@basilikum我其實愚蠢地寫了我的圖書館的樣本。請再看一遍。還有一件事,我把我的實際圖書館編入了IIFE(只是說)。 – akash4eva

回答

1

您應該使用構造函數並改用該函數的prototype屬性。對象沒有公開的prototype屬性,只有函數有。在使用構造函數創建和實例化時,生成對象的內部[[prototype]]屬性將設置爲指向構造函數的公開的prototype屬性。即使在實例化對象後,您也可以操縱prototype屬性:

function myLibraryConstructor() { 
    this.e = document.getElementById('someElement!'); 
} 

var myLibrary = new myLibraryConstructor(); 

var eventsArr = ['click','load','drag','drop']; 

var addEventToProto = function (method) { 

    if(!myLibrary.hasOwnProperty(method)) { 
     myLibraryConstructor.prototype[method] = function (fn) { addEventListener(this.e, method, fn); }; 
    } 

}; 

for (i = 0; i < eventsArr.length; i += 1) { 
    addEventToProto(eventsArr[i]); 
}; 
+0

我剛剛在我的構造器中做了循環,並且我成功地將66個事件添加到了我的原型中!不管怎麼說,還是要謝謝你! – akash4eva

+0

如果您在構造函數中進行循環,您可能會將方法添加到創建的每個實例中,而不是將它們添加到原型中。如果你真的把它們添加到原型中,那麼你可能會在每次創建實例時添加它們,這是不必要的,可能被認爲是一個錯誤。但是,後面的場景不會導致錯誤的行爲,因爲原型上的屬性將被覆蓋而不是附加。 – tiffon

相關問題