未保存javascript函数的设置状态
我正在尝试创建一个新函数MyNs.MyObj,对其调用一个修改“private”变量“prop1”的方法,下次访问公共访问器“prop1”时,它将检索保存的变量 运行下面的代码后,输出仍然是初始值“2”。有人能帮我理解为什么调用Method函数并没有像我期望的那样使用Prop1变量吗未保存javascript函数的设置状态,javascript,namespaces,closures,Javascript,Namespaces,Closures,我正在尝试创建一个新函数MyNs.MyObj,对其调用一个修改“private”变量“prop1”的方法,下次访问公共访问器“prop1”时,它将检索保存的变量 运行下面的代码后,输出仍然是初始值“2”。有人能帮我理解为什么调用Method函数并没有像我期望的那样使用Prop1变量吗 var MyNs = MyNs || {}; (function( o ){ o.MyObj = function (options) { var prop1 = options;
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);
当你这么做的时候
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'
这意味着您必须更新属性,而不是变量,您可以这样做
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);
您没有引用您认为自己是什么,在方法内部您必须使用this.Prop1来更改该属性,现在您只是创建一个新的全局。谢谢,这很有意义。