0

我有这样的东西

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

但我不能。
我想知道,是否有某种方法可以做类似的事情(不改变课程本身)。认为它会使代码更清晰,更易于维护。

4

2 回答 2

3

预定义函数怎么样?

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);
于 2012-05-21T10:14:38.627 回答
0

函数是JavaScript 世界中的一等公民。除非您在匿名函数中省略了额外的处理,否则以下内容应该有效:

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

doThis它为on obj、 named onOneonTwo和创建了三个方法别名,并为on named创建onThree了一个方法别名。doThatobjonFour

当您调用obj.onOne(...)时,它相当于 doThis.call(obj, ...).

注意:我不确定您在Class()示例中是否正确使用了 MooTool 的构造函数。阅读文档,看起来Class只有一个参数properties除外,即新创建的对象将从中继承的对象(或函数)。如果代码不起作用,请尝试删除属性el并将其添加'Extends' : el到对象文字。不过,我从未亲自使用过 MooTools,所以我不确定会发生什么。

于 2012-05-21T12:57:02.953 回答