构造函数、实例、原型间的关系

一、构造函数、实例、原型间的关系

构造函数、实例、原型间的关系_第1张图片

1.使用构造函数Fn创建一个对象f1:let f1 = new Fn()

2.函数本身自带一个属性prototype(Fn.prototype),指向调用该构造函数而创建的实例的原型

3.实例的__proto__属性指向该实例的原型,(Object.getPrototypeOf()也是指向实例原型)

        综上,Fn.prototype === f1.__proto__ === Object.getPrototypeOf(f1)

4.实例的原型(Fn.prototype)有一个属性constructor,指向该实例的构造函数,

        即Fn.prototype.constructor === Fn

5.当读取实例的属性时,如果找不到,就会查找实例的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止

二.原型的原型

我们知道js里创建一个对象:var obj=new Object()

通过上面介绍的关系,可以得到下面这张图

构造函数、实例、原型间的关系_第2张图片

 打印一下Object.prototype.__proto__,结果是个null,即表示‘没有对象’,所以原型查找到Object.prototype,便停止了,这一系列的原型,原型的原型,一直到Object.prototype,就叫做原型链。实例会向原型上“继承”属性。

 构造函数、实例、原型间的关系_第3张图片

注:此处的继承是指,当实例本身没有所查找的方法和属性时,可以去原型链上去查找使用,但并不会将该方法和属性,复制粘贴到自己这里。

你可能感兴趣的:(原型模式,javascript)