js二种特殊数据类型 es6如何添加symbol( 二 )


当我们用一个新的表达式创建一个对象时,构造函数被new以方法的形式调用:
在上面的示例代码中,构造函数在开头和结尾所做的事情,新的表达式,为我们做了:
New会创建一个空白对象,使其原型链绑定构造函数的原型属性,使其构造函数属性绑定构造函数;然后用这个对象作为这个上下文调用构造函数,如果构造函数不返回值,就把空白对象作为创建的对象 。用代码写的是:
new调用的构造函数已经转化为构造函数,但为了保持其构造函数能力,一般实现如下:
接下来,考虑类的继承 。
实例对象的初始化流程是:先由超类的构造函数初始化,再由子类的构造函数初始化,以满足子类覆盖超类的要求 。基于此,示例代码如下:
写到这里,我们发现是一堆标准代码不得不写 。所以早期很多前端框架陆续提供了上述代码的封装方案,但是一直没有统一的解决方案,直到ES6直接提供了类语法,整个事情才告一段落:
注意:JavaScript中的属性分为存储属性和访问属性(分别对应传统OOP语言中的字段和属性) 。只有原型中的方法和访问属性可以在类中声明,但旧的方法是在原型中声明存储属性 。
类表达只是语法层面的封装,最终还是基于原型和原型链 。
虽然我们不 。;现在不需要根据那套复杂的规范来声明类,理解原型和原型链,深入理解JavaScript的OOP机制仍然非常重要 。
最后给出JavaScript内置对象之间的原型链图(粗箭头为__proto__属性,细箭头为原型属性,虚箭头为构造器属性):
【js二种特殊数据类型 es6如何添加symbol】(Valu:数、字符串、布尔型;符号、Contain:阵列、集合、地图)

推荐阅读