什么是prototype屬性?
來(lái)舉個(gè)例子吧胯府,我們先創(chuàng)建一個(gè)對(duì)象介衔。
<script>
function Person(name,age){
this.name=name;
this.age=age;
}
var xiaoming=new Person("xiaoming",45)
Person.prototype.sallary=null;
xiaoming.salary=4000;
alert(xiaoming.salary)//4000
</script>
接著控制臺(tái)。我們可以查一下這個(gè)構(gòu)造函數(shù)的prototype屬性骂因。
再看看這個(gè)
最后對(duì)比
可以看到構(gòu)造函數(shù)的prototype和實(shí)例對(duì)象的_proto對(duì)象是一樣的炎咖。
prototype和_proto什么關(guān)系?
P.prototype=p.__proto_
在JavaScript中寒波,每個(gè)函數(shù)都有一個(gè)prototype屬性乘盼,當(dāng)一個(gè)函數(shù)被用作構(gòu)造函數(shù)來(lái)創(chuàng)建實(shí)例時(shí),該函數(shù)的prototype屬性值將被作為原型賦值給所有對(duì)象實(shí)例(也就是設(shè)置實(shí)例的proto屬性)影所,也就是說(shuō)蹦肴,所有實(shí)例的原型引用的是函數(shù)的prototype屬性
就這么簡(jiǎn)單~
為什么要有prototype屬性僚碎?
那就是對(duì)于每一個(gè)實(shí)例對(duì)象猴娩,type屬性和eat()方法都是一模一樣的內(nèi)容,每一次生成一個(gè)實(shí)例勺阐,都必須為重復(fù)的內(nèi)容卷中,多占用一些內(nèi)存。這樣既不環(huán)保渊抽,也缺乏效率蟆豫。
這篇文章說(shuō)的很清楚,可以參考
Javascript 面向?qū)ο缶幊蹋ㄒ唬?封裝js面向?qū)ο?/em>腳本之家
prototype是對(duì)象還是屬性懒闷?
是屬性也是對(duì)象十减!amazing。但是看例子吧
比如有constructor屬性
prototype對(duì)象和構(gòu)造函數(shù)對(duì)象有何關(guān)系愤估?
為了表述簡(jiǎn)單帮辟,我把構(gòu)造函數(shù)對(duì)象叫做類(lèi)。要不然讀著讀著自己都亂了玩焰。
類(lèi)才有prototype屬性(對(duì)象)
所有的對(duì)象都有"proto"屬性由驹,該屬性對(duì)應(yīng)該對(duì)象的類(lèi)的prototype屬性(對(duì)象)
所有類(lèi)都有"prototype"屬性,該屬性的值會(huì)被賦值給該函數(shù)創(chuàng)建的實(shí)例對(duì)象的"proto"屬性
所有的prototype都有"constructor"屬性昔园,該屬性對(duì)應(yīng)創(chuàng)建所有指向該原型的實(shí)例的構(gòu)造函數(shù)
類(lèi)和原型對(duì)象通過(guò)"prototype"和"constructor"屬性進(jìn)行相互關(guān)聯(lián)
什么是原型鏈蔓榄?
如圖并炮,追到最后就是null了
總結(jié)
這里的內(nèi)容說(shuō)起來(lái)太拗口了。算了甥郑,知道這一個(gè)就夠了
P.prototype=p.__proto_
其實(shí)很簡(jiǎn)單逃魄,只是js設(shè)計(jì)的繞彎了罷了,或者說(shuō)函數(shù)式編程本身就是不太好理解的壹若?