三、原生函数:
JS中有许多内建函数(built-in function),也叫原生函数(native function)。
- String()
- Number()
- Boolean()
- Array()
- ...
- Symbol()
JS中的原生函数看起来和Java等面向对象语言中的构造函数十分相似,都可以由new来调用。但是不同的是,
var a = new String("abc");
typeof a; // object
a instanceof String; // true
Object.prototype.toString.call(a); // [object String]
JS中“构造函数”创建出来的是封装了基本类型值(如“abc”)的封装对象。(注:在上卷②原型那一章中具体介绍过)。
一)、内部属性:
所有typeof 为 object的对象,都包含一个内部属性 [[Class]],可以通过 Object.prototype.toString.call()来访问。
二)、封装与拆封:
封装:“构造函数”
拆封:valueOf
实际上需要用到封装对象才可以使用的方法或封装对象的基本类型值时,JS会进行隐式封装、拆封(强制类型转换)。
三)、原生函数作为构造函数:
就像封装和拆封一样,一般不建议使用构造函数。可以直接通过字面量来创建对象,必要时会进行强制类型转换。
1、Symbol:
ES6中引入了Symbol,用在给对象属性命名,由于符号是具有唯一性的特殊值,因此不容易导致重名。
ES6中有一些预定义符号,以Symbol的静态属性形式出现,如 Symbol.create、Symbol.iterator等:
obj[Symbol.iterator] = function(){/*..*/};
2、原生原型:
原生构造函数有自己的,prototype对象,这些对象包含其对应子类型所特有的行为特征。
扫描二维码关注公众号,回复:
11385309 查看本文章