当我将“私人领域”归还给外界时,我很惊讶于揭示模块模式。 这是代码,
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', 有人可以帮我理解吗?
答案 0 :(得分:1)
“changename”函数仅更新对象的“name”属性;它不会混淆封闭中存在的名为“name”的局部变量,并且它不会与“foo”混淆。因此,无论您传递给“changename”,对象的“foo”属性都会保留其初始值。
一步一步:
this
绑定到该对象。this
引用的对象的“name”属性(即“vm2”对象)将更新为传递给参数的任何值。请注意,一旦初始化“vm2”,该代码中的任何内容都不会触及“foo”。
答案 1 :(得分:0)
这个案子怎么样?为什么这个人仍然是私人?
var vm = (function () {
var person = { name: "jasper" };
var changename = function (v) {
//person.name = v;
person = { };
};
return {
person: person,
changename: changename
};
})();
vm.changename("sean");
alert(vm.person.name);