先写一个组织函数
function NumberCount() {
this.number = 500
return {
getNumber: ()=> {
return this.number
}
}
}
let n = new NumberCount;
console.log(n.getNumber()) // 500
console.log(n.number) // undefined
如许就建立了函数的私有变量
为何?
函数对象的定义是:具有 [[call]] 私有字段的对象,组织器对象的定义是:具有[[construct]]的对象。
换句话说任何对象完成了[[call]]就是函数对象,能够当作函数被挪用,完成了[[construct]]就是组织器对象,能够作为组织器被挪用。然则他们并不老是一致的。
[[construct]]的实行大概有以下步骤
基于对象的原型Object.prototype建立一个新的对象,把this传给[[call]]。假如[[call]]的返回值是一个对象,返回这个对象,假如返回不是对象,就返回基于原型建立的新的对象。
所以文章开首的代码也就一览无余,为何经由过程getNumber能获取到 直接n.number却不能获取到