原型链
构造函数
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)</pre>
原型链图解:
1582708850597.png
instanceof
f instanceof Foo的判断逻辑是:f的__proto__
一层一层往上,能否找到对应到Foo.prototype