国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

JavaScript碎片—函數(shù)閉包(模擬面向?qū)ο螅?/h1>
2024-05-06 15:41:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

經(jīng)過(guò)這幾天的博客瀏覽,讓我見(jiàn)識(shí)大漲,其中有一篇讓我感觸猶深,JavaScript語(yǔ)言本身是沒(méi)有面向?qū)ο蟮模悄切┐笊駛儏s深深的模擬出來(lái)了面向?qū)ο螅屛艺鸷巢灰选1酒┛途褪窃诖嘶A(chǔ)上加上自己的認(rèn)知,如有錯(cuò)誤,還請(qǐng)見(jiàn)諒。

具體來(lái)說(shuō)實(shí)現(xiàn)模擬面向?qū)ο笾饕抢肑avaScript函數(shù)閉包這個(gè)概念。由于JavaScript中的每一個(gè)function都會(huì)形成一個(gè)作用域,而如果變量聲明在這個(gè)域中,那么外部是無(wú)法直接去訪問(wèn),要想訪問(wèn)必須new出一個(gè)實(shí)例來(lái),相當(dāng)于Java中class。首先讓我們來(lái)了解一下prototype方法:

1、不使用prototype屬性定義的對(duì)象方法,是靜態(tài)方法,只能直接用類(lèi)名進(jìn)行調(diào)用!另外,此靜態(tài)方法中無(wú)法使用this變量來(lái)調(diào)用對(duì)象其他的屬性!
2、使用prototype屬性定義的對(duì)象方法,是非靜態(tài)方法,只有在實(shí)例化后才能使用!其方法內(nèi)部可以this來(lái)引用對(duì)象自身中的其他屬性!
Tips :所有的變量,如果不加上var關(guān)鍵字,則默認(rèn)的會(huì)添加到全局對(duì)象的屬性上去!

具體來(lái)說(shuō)模擬類(lèi)有以下5種常見(jiàn)寫(xiě)法:

第一種寫(xiě)法:具體介紹見(jiàn)以下代碼注釋。

function Circle(r) {    this.r = r;  }  Circle.PI = 3.14159;/*Circle.PI屬于全局變量 */  Circle.prototype.area = function() {    return Circle.PI * this.r * this.r;  }/*Circle方法調(diào)用prototype屬性從而能用this調(diào)用 Circle方法中的r屬性*/  var c = new Circle(1.0);/* 實(shí)例化 Circle*/  alert(c.area());

第二種寫(xiě)法:與Java類(lèi)相似,推薦使用!

var Circle = function() {     var obj = new Object(); /*先實(shí)例化Object方法,使之能調(diào)用 obj.PI屬性及obj.area方法*/    obj.PI = 3.14159;          obj.area= function( r ) {       return this.PI * r * r;     }     return obj;   }      var c = new Circle();   alert( c.area( 1.0 ) );

第三種寫(xiě)法:主要思想是自己先實(shí)例化出一個(gè)對(duì)象,在往這個(gè)對(duì)象里添加屬性及方法

var Circle = new Object(); Circle.PI = 3.14159; Circle.Area = function( r ) {     return this.PI * r * r; }  alert( Circle.Area( 1.0 ) );

 第四種寫(xiě)法:該寫(xiě)法跳過(guò)new這一步驟,且電腦簡(jiǎn)單清晰明了,個(gè)人推薦這種寫(xiě)法!!

var Circle={       "PI":3.14159,      "area":function(r){          return this.PI * r * r;         }     };     alert( Circle.area(1.0) );

 第五種寫(xiě)法:此方法與前三種大同小異,不過(guò)聽(tīng)說(shuō)這種寫(xiě)法很少人用,不建議推薦使用哦!!

var Circle = new Function("this.PI = 3.14159;this.area = function( r ) {return r*r*this.PI;}");  alert( (new Circle()).area(1.0) ); 

想必各位朋友都在想既然是模擬面向?qū)ο螅鞘遣皇堑糜蟹庋b繼承,getset方法???答案是肯定的,那讓我們來(lái)看看如下代碼:

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 柏乡县| 台中市| 信丰县| 苗栗市| 平定县| 佛学| 彰武县| 新竹县| 沂水县| 临颍县| 专栏| 治多县| 峨边| 河南省| 上蔡县| 敖汉旗| 安龙县| 祁东县| 太湖县| 江城| 樟树市| 澄江县| 遂川县| 桃园县| 沂源县| 元谋县| 开封县| 纳雍县| 肇庆市| 加查县| 姚安县| 苍山县| 东光县| 黄大仙区| 荔波县| 松原市| 夏邑县| 保康县| 澄迈县| 宾川县| 宾川县|