我的對於原型鏈的相關東西一直處於一個很混亂的狀態,一直沒找時間梳理,春節之際給本身放個假,也整理下本身想看的東西bash
相關書籍《你不知道的JavaScript上卷》函數
假設有一個對象myObj,執行語句ui
myObj.foo = "a";
複製代碼
可能出現的幾種狀況:spa
常常看到這種寫法prototype
function Foo () {};
var a = new Foo();
複製代碼
這裏執行new的這一步實際是將a的原型鏈指向Foo.prototype,注意這裏比較坑的是new的時候並非複製Foo.prototype而是直接指向,因此若是new多個對象,他們全部的原型鏈都指向同一個對象!code
function Foo () {};
var a = new Foo();
Foo.prototype.constructor === Foo; //true
a.constructor === Foo;
複製代碼
Object.create()會建立一個新對象,並把該對象的原型鏈關聯到指定對象上;對象
// Object.create()的polyfill代碼
if (!Object.create) {
Object.create = function (obj) {
function F () {}
F.prototype = obj;
return new Foo();
}
}
複製代碼
function Foo () {}
Foo.prototype.blah = 'a';
var a = new Foo();
a instanceof Foo //true;
複製代碼
這裏判斷的是a的原型鏈是否有指向Foo.prototype;繼承