当我们用一个新的表达式创建一个对象时,构造函数被new以方法的形式调用:
在上面的示例代码中,构造函数在开头和结尾所做的事情,新的表达式,为我们做了:
New会创建一个空白对象,使其原型链绑定构造函数的原型属性,使其构造函数属性绑定构造函数;然后用这个对象作为这个上下文调用构造函数,如果构造函数不返回值,就把空白对象作为创建的对象 。用代码写的是:
new调用的构造函数已经转化为构造函数,但为了保持其构造函数能力,一般实现如下:
接下来,考虑类的继承 。
实例对象的初始化流程是:先由超类的构造函数初始化,再由子类的构造函数初始化,以满足子类覆盖超类的要求 。基于此,示例代码如下:
写到这里,我们发现是一堆标准代码不得不写 。所以早期很多前端框架陆续提供了上述代码的封装方案,但是一直没有统一的解决方案,直到ES6直接提供了类语法,整个事情才告一段落:
注意:JavaScript中的属性分为存储属性和访问属性(分别对应传统OOP语言中的字段和属性) 。只有原型中的方法和访问属性可以在类中声明,但旧的方法是在原型中声明存储属性 。
类表达只是语法层面的封装,最终还是基于原型和原型链 。
虽然我们不 。;现在不需要根据那套复杂的规范来声明类,理解原型和原型链,深入理解JavaScript的OOP机制仍然非常重要 。
最后给出JavaScript内置对象之间的原型链图(粗箭头为__proto__属性,细箭头为原型属性,虚箭头为构造器属性):
【js二种特殊数据类型 es6如何添加symbol】(Valu:数、字符串、布尔型;符号、Contain:阵列、集合、地图)
推荐阅读
- C语言中各种数据类型有什么区别 c语言四种基本数据类型
- excel表格设置x和y轴的数据区域 excel数据区间怎么弄
- 何所似是什么特殊句式
- 硬盘损坏如何保证数据安全 硬盘坏了打不开电脑
- 华为手机一键删除旧数据的技巧 华为云空间满了怎么清理删除
- 王者荣耀排位 排位规则大数据公开
- 恢复损坏的U盘中的重要数据文件步骤 u盘文件损坏且无法读取怎么修复
- 为什么分析比较实验数据很重要
- 手机账号密码忘了解决方法 vivo清除数据仍然要密码怎么办
- 数据迁移到新iPhone上方法 转移到ios是转移什么内容