将
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 }
。我错过了什么?
cls.foo = _data;
不会将cls.foo
别名为_data
。它只是复制_data
的值,在执行这行代码时,这个值是undefined
。
cls.foo
设置在init
中,或者(更好)将cls.foo
设置为动态的function() { return _data; }
。我相信这就是你想要的:
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/