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