当向外部世界返回“私有字段”时,我对显示模块模式感到困惑。
这是代码,

    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/

10-12 12:57