既typeof之后的另一位老朋友!

在咱们的上一节JavaScript 原型总结二 一切皆对象之typeof中说道,函数也是一种对象。他也是属性的集合,你也可以对函数进行自定义属性。

不用等咱们去试验,javascript自己就先做了表率,人家就默认的给函数一个属性——prototype。对,每个函数都有一个属性叫做prototype。

这个prototype的属性值是一个对象(属性的集合,再次强调!),默认的只有一个叫做constructor的属性,指向这个函数本身。

js原型
如上图,SuperType是是一个函数,右侧的方框就是它的原型。

原型既然作为对象,属性的集合,不可能就只弄个constructor来玩玩,肯定可以自定义的增加许多属性。例如这位Object大哥,人家的prototype里面,就有好几个其他属性。

js原型

function Fn() {}
Fn.prototype.name = 'www.zeze.info';
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

这里的”proto“成为“隐式原型”,下一节<JavaScript 原型总结四 隐式原型>。另外本人的订阅号和微信

有疑问或者商业合作可以加博主微信:twobixiaoxin。一起交流