访问闭包外部的变量

Accessing variables outside of closure

本文关键字:变量 外部 闭包 访问      更新时间:2023-09-26
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/