以前有在本身的文章中谈到对象,而说到对象咱们就不可避免的要扯到原型,而且原型也是咱们必须得理解到位的一个点,那接下来咱们就来聊一聊js的原型吧。函数
function person(name,age) { this.name=name; this.age=age; } var a=typeof person.prototype//object var b=typeof person.prototype.constructor//function var c=person.prototype.constructor==person//true
此处咱们首先能够明确了构造函数和原型对象的关系了吧this
function person(name,age) { this.name=name; this.age=age; } var pengl=new person("pengl",100); var flag=person.prototype.constructor==pengl.constructor;//true
本质:原型对象中的原型两字是对谁的原型,其实是对于新建的这些对象的原型,是这些对象中那些不变的,共有的东西,好比构造函数,各个对象的区别只是在于经过构造函数新建该对象时,传入的参数不一样。而像构造函数或者一些其余创建在原型上的方法和属性都是属于原型级别的,只是新建的对象做为它的具体实例能够用而已。prototype
function person(name,age) { this.name=name; this.age=age; this.func=objFunc; function objFunc (argument) { alert("我是属于新建对象的方法") } } var pengl=new person("pengl",100); pengl.func();
function person(name,age) { this.name=name; this.age=age; } person.prototype.func=function (argument) { alert("我是属于新建对象原型上的方法") } var pengl=new person("pengl",100); pengl.func();
第一段和第二段的区别就是是否把func方法建立在构造函数中,第一段就是直接在新建对象的级别上建立了一个方法,第二段是在新建对象的原型上建立的方法。从内存的角度看,对于第一段每建立一个对象,就要同时再建立一个func方法,而第二段是,不管建立多少个对象,都只须要一个func方法,这个方法是全部对象所共有的。code
从原型链的链字咱们就能够猜到大概是什么意思,好比咱们使用一个方法,先从该对象上找,若是没有那么就从该对象的原型上找,若是该原型没有,就从该原型的原型上找,以此类推。若是最后都没找到,则返回undefined对象
pengL->person.prototype->object.prototype->null内存