js原型与原型链总结

原型是什么,用翻译翻译过来就是prototype。讲原型的时候我们可以先补充几点其他知识点,这样可以方便我们理解prototype。
补充一:我们得先知道,引用类型(数组,对象,函数),他们都是具有对象的可拓展属性(可以百度理解)。比如,foo是个对象,foo.a=1,可以扩展一个a属性。
补充二:我们得先说说构造函数。其实所有引用类型都有构造函数。
var a = {}; 它还有这样的写法,var a = new Object();Object是a的构造函数
var b = [] ;它还有这样的写法, var b =new Array(); Array是b的构造函数
function Foo(){},它还有这样的写法var Foo = new Funcrion(){},Foo的构造函数是Function
我们可以使用instanceof来判断一个函数是否是一个变量的构造函数。是的话返回true,否则返回false。
第三:所有的引用类型(函数,数组,对象)是都是对象。那么是对象,就具有对象的可拓展特性。对象本身就带有一个属性,叫做__proto__属性,他也叫做隐式原型。
当我们想要得到某个对象的属性值时,如果这个对象没有这个属性,那么我们就需要去这个对象的隐式原型_proto_上面去找。如果还找不到的话,我们就需要去构造函数的隐式原型去找,如果还找不到,那么就会在这里停止寻找了。
例如:
var Foo = new Function(){},
var fn = new Foo()
fn.toString();
fn想用toString()属性,他首先会在fn.proto 去寻找 (fn.proto === Foo.prototype),如果还没找到,他就会到fn.proto.__proto__里卖去找,fn.proto.__proto__也等于Object.prototype里面去寻找,结果找到了。

你可能感兴趣的:(js原型与原型链总结)