1、创建对象
JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象。
当我们用obj.xxx
访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找,如果还没有找到,就一直上溯到Object.prototype
对象,最后,如果还没有找到,就只能返回undefined
使用new和构造函数创建对象时,注意,如果不写new
,这就是一个普通函数,它返回undefined
。但是,如果写了new
,它就变成了一个构造函数,它绑定的this
指向新创建的对象,并默认返回this
,也就是说,不需要在最后写return this;
。
使用构造函数创建的对象的原型属性指向构造函数的原型prototype,创建的对象还有一个构造器属性constructor指向构造函数的原型的构造器
2、继承
JavaScript的原型继承实现方式就是:
-
定义新的构造函数,并在内部用
call()
调用希望“继承”的构造函数,并绑定this
; -
借助中间函数
F
实现原型链继承,最好通过封装的inherits
函数完成; -
继续在新的构造函数的原型上定义新方法。
3、class继承
新的关键字class
从ES6开始正式被引入到JavaScript中。class
的目的就是让定义类更简单。
ES6引入的class
和原有的JavaScript原型继承有什么区别呢?实际上它们没有任何区别,class
的作用就是让JavaScript引擎去实现原来需要我们自己编写的原型链代码。简而言之,用class
的好处就是极大地简化了原型链代码。