如何在JavaScript中使用prototype和__proto_?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)建站專注于康縣企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)??悼h網(wǎng)站建設(shè)公司,為康縣等地區(qū)提供建站服務(wù)。全流程按需搭建網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
實(shí)例
function Foo() { } var foo = new Foo(); console.log(foo.prototype);// undefined console.log(foo.__proto__ === Foo.prototype);// true console.log(Foo.__proto__); [Function]
Foo.__proto__結(jié)果如下:
console.log(Foo.prototype);// [object Object]
Foo.prototype結(jié)果如下:
console.log(Foo.prototype.prototype);// undefined
實(shí)例說明了:
1、 foo 是 Foo 的一個(gè)實(shí)例,不是一個(gè)函數(shù),所以沒有prototype;
Foo是Function的一個(gè)實(shí)例,而Function是一個(gè)函數(shù),他的實(shí)例Foo也是一個(gè)函數(shù),所以他們都有prototype。此外Object Array RegExp等也是函數(shù)。Math就僅僅是一個(gè)new Object() ,不是函數(shù)。
2、構(gòu)造函數(shù)的prototype,默認(rèn)情況下就是一個(gè)new Object()還額外添加了一個(gè)constructor屬性。所以說默認(rèn)是沒有prototype只有__proto__的。
除了Object.prototype這個(gè)對(duì)象,其他所有的對(duì)象都會(huì)有__proto__屬性,之后函數(shù)才會(huì)有prototype屬性。
在創(chuàng)建對(duì)象的時(shí)候會(huì)自動(dòng)創(chuàng)建一個(gè)__proto__屬性,指向它構(gòu)造函數(shù)的prototype,當(dāng)訪問這個(gè)對(duì)象的屬性的時(shí)候會(huì)順帶訪問__proto__中對(duì)應(yīng)的屬性,也就是構(gòu)造函數(shù)prototype這樣實(shí)現(xiàn)了繼承。
只有創(chuàng)建函數(shù)的時(shí)候才會(huì)創(chuàng)建一個(gè)prototype屬性,目的就是為了完成上面的繼承方式。
總結(jié):
<1>不管是普通對(duì)象還是函數(shù)對(duì)象,它們都有一個(gè)隱含屬性”__proto__ “,而這屬性就是我們通常說的原型(屬性),它其實(shí)就是一個(gè)Object類型的對(duì)象。
<2>對(duì)于函數(shù)對(duì)象,它們還會(huì)多一個(gè)prototype的屬性,它和以它為構(gòu)造函數(shù)創(chuàng)建的普通對(duì)象的”__proto__ “屬性等同,即"new XXXt().__proto__ ===XXX.prototype"為true,即對(duì)象XXX中都有__proto__屬性就是一個(gè)指針,指向XXX構(gòu)造函數(shù)中的prototype屬性。
摘錄網(wǎng)上
一個(gè)圖(橙色箭頭是初始的關(guān)系,綠色是執(zhí)行 var Fish = new Fu... 創(chuàng)建,藍(lán)色是執(zhí)行f1= new Fish()創(chuàng)建。)
1、js屬于一種解釋性腳本語言;2、在絕大多數(shù)瀏覽器的支持下,js可以在多種平臺(tái)下運(yùn)行,擁有著跨平臺(tái)特性;3、js屬于一種弱類型腳本語言,對(duì)使用的數(shù)據(jù)類型未做出嚴(yán)格的要求,能夠進(jìn)行類型轉(zhuǎn)換,簡(jiǎn)單又容易上手;4、js語言安全性高,只能通過瀏覽器實(shí)現(xiàn)信息瀏覽或動(dòng)態(tài)交互,從而有效地防止數(shù)據(jù)的丟失;5、基于對(duì)象的腳本語言,js不僅可以創(chuàng)建對(duì)象,也能使用現(xiàn)有的對(duì)象。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。