组织函数建立私有变量(防继续)

先写一个组织函数

    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却不能获取到

    原文作者:风吹一个大耳东
    原文地址: https://segmentfault.com/a/1190000018186863
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞