0

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

さらに情報が必要な場合は、コメントを残してください。

4

1 に答える 1

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]);
};
于 2013-07-28T12:26:59.083 に答える