国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

[js高手之路]原型對(duì)象(prototype)與原型鏈相關(guān)屬性與方法詳解

svtter / 1709人閱讀

摘要:一,檢測(cè)左側(cè)的原型鏈上,是否存在右側(cè)的原型我在之前的兩篇文章高手之路構(gòu)造函數(shù)的基本特性與優(yōu)缺點(diǎn)高手之路一步步圖解的原型對(duì)象原型鏈已經(jīng)分享過(guò)了衛(wèi)莊二如果隱式原型指向調(diào)用方法的對(duì)象原型那么這個(gè)方法就返回,如衛(wèi)莊因?yàn)榈碾[式原型指向的都是,有朋友可

一,instanceof:

instanceof檢測(cè)左側(cè)的__proto__原型鏈上,是否存在右側(cè)的prototype原型. 我在之前的兩篇文章

[js高手之路]構(gòu)造函數(shù)的基本特性與優(yōu)缺點(diǎn)

[js高手之路]一步步圖解javascript的原型(prototype)對(duì)象,原型鏈

已經(jīng)分享過(guò)了.

1         function CreateObj(uName) {
 2             this.userName = uName;
 3             this.showUserName = function () {
 4                 return "100";
 5             }
 6         }
 7         CreateObj.prototype.showUserName = function () {
 8             return this.userName;
 9         }
10         var obj1 = new CreateObj("ghostwu");
11         var obj2 = new CreateObj("衛(wèi)莊");
12 
13         console.log( obj1 instanceof CreateObj ); //true
14         console.log( obj2 instanceof CreateObj ); //true
15         console.log( obj1 instanceof Object ); //true
16         console.log( obj2 instanceof Object ); //true

二、isPrototypeOf:

如果隱式原型__proto__指向調(diào)用isPrototypeOf()方法的對(duì)象原型( CreateObj ), 那么這個(gè)方法就返回true,如:

1         var obj1 = new CreateObj("ghostwu");
2         var obj2 = new CreateObj("衛(wèi)莊");
3         console.log( CreateObj.prototype.isPrototypeOf( obj1 ) ); //true
4         console.log( CreateObj.prototype.isPrototypeOf( obj2 ) ); //true 

因?yàn)閛bj1,obj2的隱式原型__proto__指向的都是CreateObj.prototype, 有朋友可能會(huì)問(wèn)CreateObj.prototype上面根本就沒(méi)有isPrototypeOf這個(gè)方法,怎么可以

調(diào)用呢?

是的,沒(méi)錯(cuò),但是CreateObj.prototype的隱式原型__proto__指向了Object.prototype, 而isPrototypeOf存在Object.prototype上,所以就能夠調(diào)用

三、Object.getPrototypeOf

獲取實(shí)例的隱式原型(__proto__)的指向,因?yàn)閛bj1,obj2的__proto__都指向CreateObj.prototype

1         var obj1 = new CreateObj("ghostwu");
2         var obj2 = new CreateObj("衛(wèi)莊");
3         console.log( Object.getPrototypeOf( obj1 ) === CreateObj.prototype ); //true
4         console.log( Object.getPrototypeOf( obj2 ) === CreateObj.prototype ); //true

四,實(shí)例訪問(wèn)屬性和方法時(shí),遵循就近查找原則

實(shí)例先在自己身上查找,有,就停止查找,如果沒(méi)有,就沿著實(shí)例的__proto__繼續(xù)往上查找,有,就停止查找,如果沒(méi)有就繼續(xù)沿著原型鏈一直往上查找,如果

所有的原型對(duì)象上都沒(méi)有,那就是undefined.

1         function CreateObj(uName) {
 2             this.userName = uName;
 3         }
 4         CreateObj.prototype.showUserName = function () {
 5             return this.userName;
 6         }
 7         CreateObj.prototype.age = 22;
 8 
 9         var obj1 = new CreateObj("ghostwu");
10         obj1.age = 20;
11         var obj2 = new CreateObj("衛(wèi)莊");
12 
13         console.log( obj1.age ); //20--->來(lái)自實(shí)例
14         console.log( obj2.age ); //22--->來(lái)自原型對(duì)象
15 
16         delete obj1.age;
17         console.log( obj1.age ); //22--->來(lái)自原型

五,hasOwnProperty

判斷屬性是實(shí)例上的還是原型對(duì)象上的,如果是實(shí)例上的,返回true, 原型上的返回false

1         function CreateObj(uName) {
 2             this.userName = uName;
 3         }
 4         CreateObj.prototype.showUserName = function () {
 5             return this.userName;
 6         }
 7         CreateObj.prototype.age = 22;
 8         var obj1 = new CreateObj("ghostwu");
 9         obj1.age = 20;
10         var obj2 = new CreateObj("衛(wèi)莊");
11         console.log( obj1.age ); //20--->來(lái)自實(shí)例
12         console.log( obj1.hasOwnProperty( "age" ) ); //true
13         console.log( obj2.age ); //22--->來(lái)自原型對(duì)象
14         console.log( obj2.hasOwnProperty( "age" ) ); //false
15         delete obj1.age;
16         console.log( obj1.age ); //22--->來(lái)自原型
17         console.log( obj1.hasOwnProperty( "age" ) ); //false

六、in操作符

判斷屬性是否在實(shí)例或者原型對(duì)象上,只要一個(gè)滿(mǎn)足條件,返回值都是true

1         function CreateObj(uName) {
 2             this.userName = uName;
 3         }
 4         CreateObj.prototype.showUserName = function () {
 5             return this.userName;
 6         }
 7         CreateObj.prototype.age = 22;
 8         var obj1 = new CreateObj("ghostwu");
 9         obj1.age = 20;
10         console.log( "age" in obj1 ); //true
11         var obj2 = new CreateObj("衛(wèi)莊");
12         console.log( "age" in obj2 ); //true
13         delete obj1.age;
14         console.log( "age" in obj1 ); //true
15         console.log( "user" in obj1 ); //false
16         console.log( "user" in obj2 ); //false

七,結(jié)合in和hasOwnProperty的用法,可以封裝一個(gè)函數(shù)判斷這個(gè)屬性是否在原型對(duì)象上, 返回值為true:在原型對(duì)象上, false:不在原型對(duì)象上

1         function CreateObj(uName) {
 2             this.userName = uName;
 3         }
 4         CreateObj.prototype.showUserName = function () {
 5             return this.userName;
 6         }
 7         CreateObj.prototype.age = 20;
 8         function hasPrototypeProperty( obj, name ){
 9             return !obj.hasOwnProperty( name ) && ( name in obj );
10         }
11         var obj1 = new CreateObj("ghostwu");
12         var obj2 = new CreateObj("衛(wèi)莊");
13         obj1.age = 10;
14         console.log( hasPrototypeProperty( obj1, "age" ) ); //false
15         console.log( hasPrototypeProperty( obj2, "age" ) ); //true

八、for...in 可以枚舉實(shí)例和原型對(duì)象上的屬性和方法,前提是:該屬性和方法是可以枚舉的

1          function CreateObj(uName) {
 2             this.userName = uName;
 3         }
 4         CreateObj.prototype.showUserName = function () {
 5             return this.userName;
 6         }
 7         CreateObj.prototype.age = 20;
 8         var obj = new CreateObj( "ghostwu" );
 9 
10         for( var key in obj ){
11             console.log( key ); //userName,age,showUserName
12         }
13         console.log( Object.prototype );
14         for( var key in Object.prototype ){
15             console.log( key );//枚舉不了, Object.prototype上的屬性和方法默認(rèn)不可枚舉,枚舉屬性為false
16         }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/85050.html

相關(guān)文章

  • [js高手之路]構(gòu)造函數(shù)的基本特性優(yōu)缺點(diǎn)

    摘要:所以一句話理解的運(yùn)算規(guī)則為檢測(cè)左側(cè)的原型鏈上,是否存在右側(cè)的原型。 上文,通過(guò)基本的對(duì)象創(chuàng)建問(wèn)題了解了構(gòu)造函數(shù),本文,我們接著上文繼續(xù)了解構(gòu)造函數(shù)的基本特性,以及優(yōu)缺點(diǎn). 每個(gè)對(duì)象上面都有一個(gè)constructor屬性( 嚴(yán)格意義上來(lái)說(shuō),是原型上的,對(duì)象是通過(guò)查找到原型找到 constructor屬性 ).后面講到原型的時(shí)候,我會(huì)用示意圖的方式說(shuō)明 1 functio...

    Ajian 評(píng)論0 收藏0
  • javaScript原型原型詳解(二)

    摘要:當(dāng)然這還沒(méi)完,因?yàn)槲覀冞€有重要的一步?jīng)]完成,沒(méi)錯(cuò)就是上面的第行代碼,如果沒(méi)有這行代碼實(shí)例中的指針是指向構(gòu)造函數(shù)的,這樣顯然是不對(duì)的,因?yàn)檎G闆r下應(yīng)該指向它的構(gòu)造函數(shù),因此我們需要手動(dòng)更改使重新指向?qū)ο蟆? 第一節(jié)內(nèi)容:javaScript原型及原型鏈詳解(二) 第一節(jié)中我們介紹了javascript中的原型和原型鏈,這一節(jié)我們來(lái)講利用原型和原型鏈我們可以做些什么。 普通對(duì)象的繼承 ...

    widuu 評(píng)論0 收藏0
  • [js高手之路] es6系列教程 - 新的類(lèi)語(yǔ)法實(shí)戰(zhàn)選項(xiàng)卡

    摘要:其實(shí)的面向?qū)ο蠛芏嘣砗蜋C(jī)制還是的,只不過(guò)把語(yǔ)法改成類(lèi)似和老牌后端語(yǔ)言中的面向?qū)ο笳Z(yǔ)法一用封裝一個(gè)基本的類(lèi)是不是很向和中的類(lèi)其實(shí)本質(zhì)還是原型鏈,我們往下看就知道了首先說(shuō)下語(yǔ)法規(guī)則中的就是類(lèi)名,可以自定義就是構(gòu)造函數(shù),這個(gè)是關(guān)鍵字,當(dāng)實(shí)例化對(duì) 其實(shí)es6的面向?qū)ο蠛芏嘣砗蜋C(jī)制還是ES5的,只不過(guò)把語(yǔ)法改成類(lèi)似php和java老牌后端語(yǔ)言中的面向?qū)ο笳Z(yǔ)法. 一、用es6封裝一個(gè)基本的類(lèi) ...

    yintaolaowanzi 評(píng)論0 收藏0
  • [js高手之路]使用原型對(duì)象(prototype)需要注意的地方

    摘要:原型對(duì)象的共享特性,可以很方便的為一些內(nèi)置的對(duì)象擴(kuò)展一些方法,比如,數(shù)組去重復(fù)但是,不要隨便往內(nèi)置的對(duì)象上面擴(kuò)展方法,在多人協(xié)作開(kāi)發(fā),很容易產(chǎn)生覆蓋,以及污染 我們先來(lái)一個(gè)簡(jiǎn)單的構(gòu)造函數(shù)+原型對(duì)象的小程序 1 function CreateObj( uName, uAge ) { 2 this.userName = uName; 3 ...

    chnmagnus 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)總結(jié)(五)原型原型詳解

    摘要:原型對(duì)象內(nèi)部也有一個(gè)指針屬性指向構(gòu)造函數(shù)實(shí)例可以訪問(wèn)原型對(duì)象上定義的屬性和方法。在創(chuàng)建子類(lèi)型的實(shí)例時(shí),不能向超類(lèi)型的構(gòu)造函數(shù)中傳遞參數(shù)。 贊助我以寫(xiě)出更好的文章,give me a cup of coffee? 2017最新最全前端面試題 私有變量和函數(shù) 在函數(shù)內(nèi)部定義的變量和函數(shù),如果不對(duì)外提供接口,外部是無(wú)法訪問(wèn)到的,也就是該函數(shù)的私有的變量和函數(shù)。 function ...

    EscapedDog 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<