处理闭包中定义的变量

Nik*_* B. 6 javascript closures

假设我有一个Javascript类定义并实例化如下:

Demo = function() { 
  var abc = "foo";

  return {
    get test() { return abc; }
  }
}

obj = Demo();
obj.test  // evaluates to "foo"
Run Code Online (Sandbox Code Playgroud)

面对这个Demo实例obj,我可以更改abc属于此对象的变量的值,该变量是在constructur函数引入的闭包中定义的吗?

jfr*_*d00 3

var abc在演示范围之外不能直接使用。

如果您想从该范围之外更改它,则必须添加一个方法来设置它。

Demo = function() { 
  var abc = "foo";

  return {
    get test() { return abc; }
  }

  this.setTest(a) {abc = a;}
}

var obj = new Demo();
obj.setTest("fun");
Run Code Online (Sandbox Code Playgroud)

有关可以使用的访问器类型的示例,请参阅前面的讨论。