在我们的上一节(JavaScript 原型总结二 一切皆对象之typeof)中说道,函数也是一种对象。他也是属性的集合,你也能够对函数进行自定义属性。javascript
不用等我们去试验,javascript本身就先作了表率,人家就默认的给函数一个属性——prototype。对,每一个函数都有一个属性叫作prototype。java
这个prototype的属性值是一个对象(属性的集合,再次强调!),默认的只有一个叫作constructor的属性,指向这个函数自己。微信
如上图,SuperType是是一个函数,右侧的方框就是它的原型。函数
原型既然做为对象,属性的集合,不可能就只弄个constructor来玩玩,确定能够自定义的增长许多属性。例如这位Object大哥,人家的prototype里面,就有好几个其余属性。spa
function Fn() { } Fn.prototype.name = '张泽立'; Fn.prototype.getYear = function () { return 0; }; var fn = new Fn(); console.log(fn.name); console.log(fn.getYear()); //即,Fn是一个函数,fn对象是从Fn函数new出来的,这样fn对象就能够调用Fn.prototype中的属性。 //由于每一个对象都有一个隐藏的属性——“__proto__”,这个属性引用了建立这个对象的函数的prototype。 //即:fn.__proto__ === Fn.prototype
说到底:对象是由函数建立的.JavaScript的继承离不开prototype.这也是问什么函数的typeof为何是Function类型了,原则上就是造成了一个原型环链,可能这里讲的不叫抽象,这是必要要注意对象的"_proto_".net
这里的"__proto__"成为“隐式原型”,下一节<JavaScript 原型总结四 隐式原型>。另外本人的订阅号和微信prototype