簡體   English   中英

一次設置多個選項javascript(MooTools)對象

[英]Set multiple options javascript (MooTools) object at once

我有這樣的東西

var obj = new someClass(el, {
    onOne: function () {
        doThis();
    },
    onTwo: function () {
        doThis();
    },
    onThree: function () {
        doThis();
    },
    onFour: function () {
        doThat();
    }
});

因此,前三個事件將具有相同的結果,只有第四個事件是不同的。 這樣,似乎有點重復,所以我希望我可以做這樣的事情

var obj = new someClass(el, {
    onOne: 
    onTwo: 
    onThree: function () {
        doThis();
    },
    onFour: function () {
        doThat();
    }
});

但是我不能。
我想知道,是否有某種方法可以做類似的事情(無需更改類本身)。 在思想上,它將使代碼更清晰,更易於維護。

如何預定義功能?

var myHandler = function() {
    doThis();
};

var obj = new Class(el, {
    onOne: myHandler,
    onTwo: myHandler,
    onThree: myHandler,
    onFour: function () {
        doThat();
    }
});

如果您知道對象的鍵,則可以另外嘗試使用for循環,例如

var passIt = { 
    onFour: function() { 
        doThat(); 
    } 
};

var keys = ['onOne', 'onTwo', 'onThree'];
var l = keys.length;
for (var i = 0; i < l; i++) {
    passIt[keys[i]] = myHandler;
}

var obj = new Class(el, passIt);

函數是JavaScript世界中的一等公民 除非您在匿名函數中省略了額外的處理,否則以下內容應該起作用:

var obj = new Class(el, { 
    onOne   : doThis
  , onTwo   : doThis
  , onThree : doThis
  , onFour  : doThat
})

它創建了三個方法別名doThisobj ,命名onOneonTwoonThree ,和方法別名doThatobj命名onFour

當您調用obj.onOne(...) ,它等效於 doThis.call(obj, ...)

注意 :我不確定您的示例中是否正確使用了MooTool的Class()構造函數。 閱讀文檔時 ,看起來就像Class只不過有一個參數,即新創建的對象將繼承的一個properties對象(或函數)。 如果代碼不起作用,請嘗試刪除el並向對象文字添加'Extends' : el屬性。 不過,我從來沒有親自使用過MooTools,所以我不確定會發生什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM