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

js二种特殊数据类型?
JS有两种数据类型:

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


基本数据类型:数字、字符串、布尔、空、未定义、符号(ES6),可以直接操作变量中存储的实际值 。
引用数据类型:Object(在JS中,除了基本数据类型,所有的对象、数据、函数、正则表达式都是对象) 。
如何理解JavaScript的原型和原型链?
JavaScript中的原型和原型链都是实现OOP的手段 。OOP在JavaScript中的具体实现如下:
对象是属性的集合 。特别地,其值是函数的属性是方法 。相似对象的公共属性被提取并聚集在一起形成一个类,这些对象被称为该类的实例 。同样,相似类的公共属性被提取出来,聚集在一起形成一个新类,这个新类是以前类的超类,以前的类是这个类的子类 。多个超类也可以作为子类来聚集一个新的超类,这个过程会一直持续下去,直到出现一个名为Object的类,并且它的超类为Null 。
类不仅是公共属性的集合,还是对象工厂 。类的实例对象是由该类的构造函数创建的 。构造函数负责两件事:
创建一个对象;
初始化对象;
因为方法已经提供了前者的实现,所以构造函数真正需要做的是初始化对象,这分为两件事:
让对象具有由类收集的公共属性;
根据参数,一些对象的属性被特殊化;
对于第二件事,没什么好说的,就是给要初始化的对象添加专门的属性 。对于第一件事,你也可以模仿后一种实现方法,但这并不是一个明智的选择,因为这些公共属性的值在大多数情况下是不会改变的 。JavaScript选择方法是:
将这些公共属性作为属性,并赋予它们默认的属性值,创建一个原型对象;
初始化时,原型对象被赋予要初始化的对象的特殊属性:_ _ proto _ _
也就是说,一个类对应一个原型对象,初始化时用_ _ proto _ _连接实例对象和原型对象 。
特殊属性__proto__不仅负责连接实例和原型,还负责连接子类和超类的原型对象,实现类之间的继承关系 。这样,一个对象 s类原型,超类原型,超类超类原型...连接成一个 "链条 "通过__proto__,称为对象的原型链 。是的,一个对象的__proto__属性为null,说明这个对象没有原型链,Object类的原型是这样的 。
为了实现通过原型初始化实例的方法,需要在访问对象的属性时相互协作:
读取属性值:先在对象中寻找属性,如果存在则返回其值;否则,在prototype对象中查找,如果存在则返回其值;否则,在原型对象的原型对象中查找,直到原型链为空,表示属性未定义,返回undefined;
给属性赋值:找到对象中的属性,如果存在就给它赋值,如果不存在就在对象中创建属性并给它赋值;
删除属性:如果属性存在于对象中,删除它,否则不做任何事情 。
这种访问机制保证了对象属性可以覆盖(揭开)原型属性,但不会改变原型属性,这就是OOP的多态性 。
构造函数在创建对象时需要使用prototype对象,通过prototype属性知道其对应类的prototype对象 。此外,为了让实例对象知道谁创建了它,它的构造函数属性 "抓取 "构造函数 。类的原型对象也被认为是由该类的构造函数创建的 。
接下来,让我们 让我们看看实现OOP的具体代码:
首先,不考虑继承关系,声明类的示例代码如下:
注意:应该避免直接使用特殊属性__proto__ 。正式的是调用方法,方法的参数是要创建的对象的原型对象 。注意:按照OOP语言的传统,构造函数的名字就是类的名字 。
当一个函数被调用时,如果这个上下文被绑定到一个普通的对象(而不是空的或者全局的对象窗口),这个函数被作为对象的方法调用 。

推荐阅读