当向外部世界返回“私有字段”时,我对显示模块模式感到困惑。
这是代码,
var vm2 = (function(){
var
name = 'sean',
changename = function(v){
this.name=v;
};
return {
name: name,
foo: name,
changename:changename
};
}());
vm2.changename('jasper');
console.log(vm2.name);
console.log(vm2.foo);
结果让我感到困惑,vm2.name是“ jasper”,而vm2.foo仍然是“ sean”,
有人可以帮我理解吗?
最佳答案
“ changename”功能仅更新对象的“ name”属性;它不会与闭包中存在的名为“ name”的局部变量发生混乱,也不会与“ foo”发生混乱。因此,无论您传递给“ changename”什么,对象的“ foo”属性都将保留其初始值。
所以一步一步来:
变量“ vm2”由该匿名函数初始化。它的值是一个具有三个属性的对象。
可以通过“ vm2”上的属性引用来调用“ changename”功能。这将导致在执行“ changename”时将this
绑定到该对象。
在“ changename”内部,this
所引用的对象(即“ vm2”对象)的“ name”属性将更新为作为参数传递的任何值。
请注意,一旦初始化“ vm2”,该代码中的任何内容都不会触及“ foo”。
关于javascript - Javascript显示模块,返回私有(private)字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18674452/