次のように定義された 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();