设置javascript函数的状态不保存

时间:2014-03-10 13:51:40

标签: javascript namespaces closures

我正在尝试创建一个新函数MyNs.MyObj(),在其上调用一个修改'private'变量'prop1'的方法,下次我访问公共访问器时,'Prop1'表示它检索已保存的变量。

运行以下代码后,输出仍为“2”(初始值)。有人可以帮助我理解为什么调用Method函数不会像我期望的那样使用Prop1变量吗?

var MyNs = MyNs || {};

(function( o ){
    o.MyObj = function (options) {
        var prop1 = options;

        var obj = {
            Prop1: prop1,
            Method: function() { 
                prop1 = "abc";
            }
        };

        return obj;
    };
})(MyNs);

var s = new MyNs.MyObj(2);
s.Method();

console.log(s.Prop1);

1 个答案:

答案 0 :(得分:0)

当你这样做时

var prop1 = options;

var obj = {
    Prop1: prop1
};

您已将Prop1设置为当时prop1的值,稍后更改prop1将不会更新Prop1
您可以使用

之类的东西轻松测试
var a = 'abc'; // set a value on 'a'
var b = a;     // set 'b' to equal 'a', as it's a string, it's passed directly

a = 'bca';     // set a new value for 'a'

alert(b);      // still outputs 'abc'

FIDDLE

这意味着你必须更新属性而不是变量,你就这样做了

var MyNs = MyNs || {};

(function( o ){
    o.MyObj = function (options) {
        var prop1 = options;

        var obj = {
            Prop1: prop1,
            Method: function() { 
                this.Prop1 = "abc";
            }
        };

        return obj;
    };
})(MyNs);

var s = new MyNs.MyObj(2);
s.Method();

console.log(s.Prop1);

FIDDLE