摘要:先写一个构造函数这样就创建了函数的私有变量为什么函数对象的定义是具有私有字段的对象,构造器对象的定义是具有的对象。但是他们并不总是一致的。的执行大概有以下步骤基于对象的原型创建一个新的对象,把传给。
先写一个构造函数
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://www.ucloud.cn/yun/101780.html
摘要:函数用于指定对象的行为。关于属性只在构造器函数的原型上才有的属性并指向该构造器,改写了的原型对象默认是没有属性的。函数化工厂模式在伪类模式里,构造器函数不得不重复构造器已经完成的工作。 1.对象适合于收集和管理数据,容易形成树型结构。Javascript包括一个原型链特性,允许对象继承另一对象的属性。正确的使用它能减少对象的初始化时间和内存消耗。2.函数它们是javascript的基础...
摘要:但采用构造器调用模式,即是使用了前缀去调用一个函数时,函数执行的方式会改变。对象包含构造器需要构造一个新的实例的所有信息。构造器的变量和内部函数变成了该实例的私有成员。 JavaScript 是一门弱类型语言,从不需要类型转换。对象继承关系变得无关紧要。对于一个对象来说重要的时它能够做什么,而不是它从哪里来。 阅读《javascript语言精粹》笔记! 伪类 js的原型存...
面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装、继承、多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义JS中对象:无序属性的集合,其属性可以包含基本值、对象或者函数。 我们首选要了解封装、继承、多态又有如何特点 封装:顾名思义来封装变量和函数封装->特点:高度复用,降低冗余度,更有利于模块化编程,能够为...
摘要:因为可能存在一个同名的构造函数,当你调用的时候,解析器需要顺着作用域链从当前作用域开始查找,直到找到全局构造函数为止。 简介 在软件开发过程中,模式是指一个通用问题的解决方案。一个模式不仅仅是一个可以用来复制粘贴的代码解决方案,更多地是提供了一个更好的实践经验、有用的抽象化表示和解决一类问题的模板。 对象有两大类: 本地对象(Native):由ECMAScript标准定义的对象 宿主...
摘要:给添加属性给的原型对象添加属性原型链在中,每个对象都有一个属性,其保存着的地址就构成了对象的原型链。实例变量实例函数原型链继承有了原型链,就可以借助原型链实现继承。是中唯一一个处理属性但是不查找原型链的函数。 前端学习:教程&开发模块化/规范化/工程化/优化&工具/调试&值得关注的博客/Git&面试-前端资源汇总 欢迎提issues斧正:原型&原型链&原型继承 JavaScript-原...
阅读 3177·2021-11-17 09:33
阅读 3273·2021-11-15 11:37
阅读 2934·2021-10-19 11:47
阅读 3178·2019-08-29 15:32
阅读 978·2019-08-29 15:27
阅读 1509·2019-08-29 13:15
阅读 900·2019-08-29 12:47
阅读 1996·2019-08-29 11:30