访问闭包之外的变量

时间:2013-03-30 01:35:21

标签: javascript oop

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 }。我错过了什么?

2 个答案:

答案 0 :(得分:2)

cls.foo = _data;不会将cls.foo别名为_data。它只复制_data的值,该值在执行时为undefined

cls.foo内设置init,或者{更好}使cls.foo动态设置为function() { return _data; }

答案 1 :(得分: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/