0

我有一个这样定义的 JavaScript 函数对象:

var minimal = (function() {
    var handler = undefined;
    var test = function() {
        console.log(typeof handler);
        if (typeof handler === 'function') {
            handler();
        }
    };
    var API = {
        handler: handler,
        test: test
    };
    return API;
}());

我希望能够随意将函数注入到对象中。

当我在该属性中设置一个函数时,该函数没有被分配给对象属性,它仍然显示为undefined

minimal.handler = function() {
    console.log('handled');
};
minimal.test();

我只是把这一切都错了吗?我应该使用更好的模式吗?


解决方案

阅读评论和回复后,我意识到问题在于我正在覆盖API对象中的值:没有设置对象的处理程序变量。这是一个最小的工作示例:

var minimal = (function() {
    var handler = undefined;
    var test = function() {
        console.log(typeof handler);
        if (typeof handler === 'function') {
            handler();
        }
    };
    var setHandler = function(func) {
        handler = func;
    };
    var API = {
        setHandler: setHandler,
        test: test
    };
    return API;
}());
minimal.setHandler(function() {
    console.log('handled');
});
minimal.test();
4

1 回答 1

3

这完全没问题:

myFuncObj = new function() {
    this.changeHandler = undefined;
};

myFuncObj.changeHandler = function(a, b) {
    console.log({a:a,b:b});
}

> myFuncObj
[-] Object 
 + changeHandler Function
 [-] Object
  + constructor Function
  [-] Object
> myFuncObj.changeHandler(1, 2)
[-] Object 
 + a: 1
 + b: 2
 [-] Object

除了你永远不应该使用new function() { … }. 做就是了

var myFuncObj = {
    changeHandler: undefined;
};
myFuncObj.changeHandler = function(a, b) {
    console.log({a:a,b:b});
};

或者

var myFuncObj = {
    changeHandler: function(a, b) {
        console.log({a:a,b:b});
    }
};
于 2014-11-18T21:47:25.283 回答