原型链

原型链

构造函数

 function Foo(name, age) {
  this.name = name
 }
 var f = new Foo('111')
 console.log(f.name)

Foo就是一个构造函数,我们使用 new 创建了一个实例对象 f

__proto__

所有的引用类型(object array function)都有一个__proto__ 属性,属性的值事一个普通对象

prototype

所有的函数都有一个prototype属性,属性值事一个普通对象。所有引用类型的__proto__属性指向它的构造函数的‘prototype’

 function fn() {}
 ​
 console.log(fn.__proto__)
 console.log(Function.prototype)

原型链和原型规则

当试图得到一个对象的某个属性事,如果这个对象本身没有这个属性,那么会去它的__proto__(构造函数的的prototype)中寻找

 function Foo(name, age) {
  this.name = name
 }
 Foo.prototype.sayHello = function () {
  console.log('hello' + this.name)
 }
 ​
 var f = new Foo('james')
 f.sayHello()// hellojames
 f.toString()// __proto__.__proto__
 console.log(f.name)

原型链图解:


1582708850597.png

instanceof

f instanceof Foo的判断逻辑是:f的__proto__一层一层往上,能否找到对应到Foo.prototype

你可能感兴趣的:(原型链)