我的对于原型链的相关东西一直处于一个很混乱的状态,一直没找时间梳理,春节之际给本身放个假,也整理下本身想看的东西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;继承