将函数赋值给函数对象的属性

时间:2014-11-18 21:41:54

标签: javascript function-object

我有一个像这样定义的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();

1 个答案:

答案 0 :(得分: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

除了你never should use 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});
    }
};