JavaScript构造私有成员

JavaScript构造私有成员

Content #

有JavaScript代码如下:

function cls(){
    this.a = 100;
    return {
        getValue:() => this.a
    }
}
var o = new cls;
o.getValue(); //100

其中a=100只能通过o.getValue()来得到,无法通过o.a来得到,请问是什么原因?

我们大致可以认为,construct的执行过程如下:

  1. 以 Object.prototype 为原型创建一个新对象;
  2. 以新对象为 this,执行函数的call;
  3. 如果call的返回值是对象,那么,返回这个对象,否则返回第一步创建的新对象。

这样的规则造成了个有趣的现象,如果我们的构造器返回了一个新的对象,那么 new 创建的新对象就变成了一个构造函数之外完全无法访问的对象,这一定程度上可以实现“私有”。

Viewpoint #

From #