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 回答