原型鏈
構造函數
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