通过JavaScript中的循环在对象的原型中添加方法

时间:2013-07-28 12:14:09

标签: javascript

我试图通过使用for循环一次向对象添加几个方法。

我所拥有的是一个数组,其中包含数组中的点击,加载等几个事件的名称,因此我很容易将这些事件插入到我的库的对象中。但是,我无法通过循环将方法添加到我的对象中。

这是我的代码:

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]);
};

如果您需要更多信息,请发表评论。

1 个答案:

答案 0 :(得分: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]);
};