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

首頁 > 語言 > JavaScript > 正文

JavaScript 面向對象入門精簡篇第1/2頁

2024-05-06 14:15:59
字體:
來源:轉載
供稿:網友

封裝 :javascript中創建對象的模式中,個人認為通過閉包才算的上是真正意義上的封裝 ,所以首先我們先來簡單介紹一下閉包,看下面這個例子:
代碼如下:
<script type="text/javascript">
function myInfo(){
var name ="老魚",age =27;
var myInfo = "my name is" + name + "i am" + age +"years old";
function showInfo(){
alert(myInfo);
}
return showInfo;
}
var oldFish = myInfo();
oldFish();
</script>

是不是很眼熟呢?沒錯了,這其實就是一個簡單的閉包應用了。簡單解釋一下:上面的函數myInfo中定義的變量,在它的內嵌函數showInfo中是可訪問的(這個很好理解),但是當我們把這個內嵌函數的返回引用賦值給一個變量oldFish,這個時候函數showInfo是在myInfo函數體外被調用,但是同樣可以訪問到定義在函數體內的變量。oh yeah!

總結一下閉包的原理吧:函數是運行在定義他們的作用域中而不是調用他們的作用域中。 其實返回一個內嵌函數也是創建閉包最常用的一種方法!

如果覺得上面的解釋太抽象的話,那么我們一起重塑上面的函數,看看這樣是否層次鮮明一些:
代碼如下:
<script type="text/javascript">
var ioldFish = function(name,age){
var name = name,age = age;
var myInfo = "my name is" + name + "i am" + age +"years old";
return{
showInfo:function(){
alert(myInfo);
}
}
}
ioldFish("老魚",27).showInfo();
</script>

上例中的編碼風格是ext yui 中比較常見的,公私分明,一目了然。通過閉包,我們可以很方便的把一些不希望被外部直接訪問到的東西隱藏起來,你要訪問函數內定義的變量,只能通過特定的方法才可以訪問的到,直接從外部訪問是訪問不到的,寫的挺累,饒了一圈終于轉回來了,封裝嘛,不就是把不希望被別人看到的東西隱藏起來嘛!哈哈……

上例如果轉換成JQ 的風格的話,應該如下例所寫,這樣的封裝模式屬于門戶大開型模式,里面定義的變量是可以被外部訪問到的(下面的例子如果你先實例化一個對象,然后在函數外部訪問對象的name或者 age屬性都是可以讀取到的)當然這種模式下我們可以設置一些”潛規則”,讓團隊開發成員明白哪些變量是私用的,通常我們人為的在私有變量和方法前加下劃線”_”,標識警戒訊號!從而實現”封裝”!
代碼如下:
<script type="text/javascript">
var ioldFish = function(name,age){
return ioldFish.func.init(name,age);
};
ioldFish.func = ioldFish.prototype ={
init:function(name,age){
this.name = name;
this.age = age;
return this;
},
showInfo:function(){
var info = "my name is" + this.name +"i am " +this.age+"years old";
alert(info);
}
};
ioldFish.func.init.prototype = ioldFish.func;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 临清市| 保靖县| 松滋市| 鄱阳县| 西峡县| 安图县| 芦溪县| 光山县| 策勒县| 峡江县| 井研县| 犍为县| 拜泉县| 麻栗坡县| 张北县| 页游| 沧州市| 永福县| 山东省| 济源市| 陕西省| 玉树县| 牙克石市| 恩平市| 平原县| 开远市| 龙门县| 疏勒县| 台东县| 游戏| 健康| 石家庄市| 西乌珠穆沁旗| 武强县| 兴和县| 抚远县| 泾源县| 中山市| 岳池县| 江安县| 黔西|