原型链类自查清单
-
创建对象的几种方法
-
原型、构造函数、事例、原型链
-
instanceof原理
-
new运算符
对象的3种常见的创建方式:
- 【字面量】默认对象的原型链指向object
- 【显式构造函数创建对象】
- 【object.create】创建的对象由原型链来链接的
原型、构造函数、事例
只有函数才会有prototype属性
也只有实例对象才有__proto__,函数也是对象所以也有该属性
原型链
从当前的实例对象向上找构造这个实例的相关连对象,这个相关连的实例对象向上找又有创造它的相关联的对象,这样一层一层的找,直到找到objet.prototype。
原型链的基本原理就是:每个实例对象都可以通过原型链找到它的原型对象,这个原型对象所具备的方法和属性都是被这个实例对象所共享的
instanceof原理
instanceof本质上是判断实例对象的__proto__和构造函数的prototype引用的是不是一个地址。
A instanceof B:判断B的prototype是否在A的原型链上
tips:当前实例对象原型链上的构造函数都将返回true,要想判断当前的构造函数是否是当前实例对象的构造函数,引用constructor来判断
new运算符
-
一个新对象被创建。它继承自foo.prototype
-
构造函数foo被执行。执行的时候,相应的传参会被传入,同时上下文(this)会被指定为这个新实例。new foo等同于new foo(),只能用在不传递任何参数的情况
-
如果构造函数返回了一个“对象”,那么这个对象就会取代整个new出来的结果。如果构造函数没有返回对象,那么new出来的结果为步骤1创建的对象
var new = functiom(func) { var fn = Object.create(func.prototype) var k = func.call(fn) return typeof k === 'object' ? k : fn }