class为es6推出的,本质上就是原型链继承的语法糖,例如有class People ,typeof People //function,说明本质上People还是个函数方法,class本质上还是js的原型链继承,并不是真正的class继承
构建constructor,在执行new实例化对象时,其实就是在执行class中的constructor函数
继承主要用到extends继承和super执父类的构造函数
类型判断
{} instanceof Object // true
这里可以理解为,{}继承于Object
隐式原型和显示原型
隐式原型:x.__proto__
显示原型:People.prototype
xialuo.__proto__ = People.prototype原型关系
每个class都有显示原型prototype
每个实例都有隐式原型__proto__
实例的__proto__指向对应class的prototype
执行规则
获取属性xialuo.name或执行方法xialuo.sayhi()时
先在自身属性和方法寻找
找不到则自动去__proto__中寻找
原型链
Student.prototype.__proto__ === People.prototype检测当前属性是否属于当前对象
xialuo.hasOwnProperty('name') // true
xialuo.hasOwnProperty('sayHi') // false
hasOwnProperty只是Object众多属性方法中的一个A instanceOf B
instanceOf工作原理即判断A的__proto__是否可以顺着原型链找到B的prototype
注意:class是ES6语法规范,即只是一种代码书写规范,并不是规定了原型的具体实现方式,原型的实现与继承可以有多种方式。本文提到的实现方式都是V8引擎的实现方式,也是目前主流方式
网友评论