1
var MyClass = (function () {

    var _data;

    var cls = function () { };

    cls.prototype = {

        init: function(data){
            _data = data;
        }
    };

    cls.foo = _data;
    cls.bar = 1;

    return cls;
})();

var someData = { foo: true };

var cls = new MyClass();
cls.init(someData);

console.log(MyClass.foo); //undefined
console.log(MyClass.bar); //1

なぜMyClass.fooここに設定されていないのですか?init()その上で実行するメソッドで設定されています。したがって、 を返す必要があり{ foo: true }ます。私は何を取りこぼしたか?

4

2 に答える 2

2

cls.foo = _data;にエイリアスcls.fooしません_data_data行が実行された時点での の値をコピーするだけですundefined

cls.fooの内部に設定initするか、(より良い)cls.fooとして動的にしfunction() { return _data; }ます。

于 2013-03-30T01:37:28.650 に答える
1

これがあなたが望むものだと思います:

function MyClass() { }

MyClass.prototype.init = function (data) {
    MyClass.foo = data;
};

MyClass.bar = 1;

これで期待どおりに動作します:

var someData = { foo: true };

var cls = new MyClass;
cls.init(someData);

console.log(MyClass.foo);
console.log(MyClass.bar);

ここでデモを参照してください: http://jsfiddle.net/gTDZk/

于 2013-03-30T01:44:14.220 に答える