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 に答える