最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript 之封裝(Package)

 更新時(shí)間:2018年09月14日 16:04:23   作者:java面試筆試  
Javascript是一種基于對(duì)象(object-based)的語(yǔ)言,我們?cè)贘S中遇到的所有東西幾乎都是對(duì)象。但是,它又不是一種真正的面向?qū)ο缶幊陶Z(yǔ)言,因?yàn)樗恼Z(yǔ)法中沒(méi)有class(類)那么,如果我們要把"屬性"(property)和"方法"(method),封裝成一個(gè)對(duì)象

一、 構(gòu)造函數(shù)(Constructor)模式的封裝
為了解決從原型對(duì)象生成實(shí)例的問(wèn)題,Javascript提供了一個(gè)構(gòu)造函數(shù)(Constructor)模式。
所謂"構(gòu)造函數(shù)",其實(shí)就是一個(gè)普通函數(shù),但是內(nèi)部使用了this變量。對(duì)構(gòu)造函數(shù)使用new運(yùn)算符,就能生成實(shí)例,并且this變量會(huì)綁定在實(shí)例對(duì)象上。
舉個(gè)例子,下面生成的是狗的原型對(duì)象:

function Dog(name,color,species){

this.name = name;

this.color = color;

this.species = species;

this.type = "犬科動(dòng)物";

}

生成實(shí)例對(duì)象如下:

var dog1 = new Dog("大黃","黃色","中華田園犬");

var dog2 = new Dog("小黑","黑色","德國(guó)黑背");

alert(dog1.name); //大黃

alert(dog2.color); //黑色

這時(shí)dog1和dog2會(huì)自動(dòng)含有一個(gè)constructor屬性,指向它們的構(gòu)造函數(shù)。

alert(dog1.constructor == Dog); //true

alert(dog2.constructor == Dog); //true

Javascript還提供了一個(gè)instanceof運(yùn)算符,驗(yàn)證原型對(duì)象與實(shí)例對(duì)象之間的關(guān)系。

alert(dog1 instanceof Dog); //true

alert(dog2 instanceof Dog); //true

但是,構(gòu)造函數(shù)模式也存在浪費(fèi)內(nèi)存的問(wèn)題。因?yàn)閷?duì)于每一個(gè)實(shí)例對(duì)象,type屬性都是一樣的內(nèi)容,每生成一個(gè)實(shí)例對(duì)象,都必須為重復(fù)的內(nèi)容多分配一次內(nèi)存,這樣既不節(jié)省,也缺乏效率。因此,我們應(yīng)該想出一種讓type這樣的屬性在內(nèi)存中只生成一次,并且所有實(shí)例都指向這個(gè)內(nèi)存地址的方法。

二、 構(gòu)造函數(shù)結(jié)合原型屬性(Prototype)模式的封裝
針對(duì)構(gòu)造函數(shù)方法會(huì)浪費(fèi)內(nèi)存的問(wèn)題,有下面的解決方案,即將那些不變的屬性和方法,直接定義在構(gòu)造函數(shù)的Prototype對(duì)象上。

function Dog(name,color,species){

this.name = name;

this.color = color;

this.species = species;

}

Dog.prototype.type = "犬科動(dòng)物";

生成實(shí)例對(duì)象如下:

var dog1 = new Dog("大黃","黃色","中華田園犬");

var dog2 = new Dog("小黑","黑色","德國(guó)黑背");

alert(dog1.type); //犬科動(dòng)物

這時(shí)所有實(shí)例的type屬性,其實(shí)都是同一個(gè)內(nèi)存地址,指向prototype對(duì)象,因此就提高了運(yùn)行效率。


三、 Prototype模式的驗(yàn)證方法
為了配合prototype屬性,Javascript定義了一些輔助方法,幫助我們使用它。

3.1 isPrototypeOf()

這個(gè)方法用來(lái)判斷,某個(gè)proptotype對(duì)象和某個(gè)實(shí)例之間的關(guān)系。

alert(Dog.prototype.isPrototypeOf(dog1)); //true

alert(Dog.prototype.isPrototypeOf(dog2)); //true

3.2 hasOwnProperty()

每個(gè)實(shí)例對(duì)象都有一個(gè)hasOwnProperty()方法,用來(lái)判斷某一個(gè)屬性到底是本地屬性,還是繼承自prototype對(duì)象的屬性。

alert(dog1.hasOwnProperty("name")); // true

alert(dog1.hasOwnProperty("type")); // false

3.3 in運(yùn)算符

in運(yùn)算符可以用來(lái)判斷,某個(gè)實(shí)例是否含有某個(gè)屬性,不管是不是本地屬性。

alert("name" in dog1); // true

alert("type" in dog1); // true

in運(yùn)算符還可以用來(lái)遍歷某個(gè)對(duì)象的所有屬性。

for(var prop in dog1) { alert("dog1["+prop+"]="+dog1[prop]); }

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 詳解 TypeScript 枚舉類型

    詳解 TypeScript 枚舉類型

    這篇文章主要介紹了TypeScript 枚舉類型,TypeScript 在 ES 原有類型基礎(chǔ)上加入枚舉類型,使得在 TypeScript 中也可以給一組數(shù)值賦予名字,這樣對(duì)開(kāi)發(fā)者比較友好,可以理解枚舉就是一個(gè)字典,文章內(nèi)容圍繞TypeScript 枚舉類型展開(kāi)內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • WebAssembly使用方法研究

    WebAssembly使用方法研究

    這篇文章主要為大家介紹了WebAssembly使用方法研究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 微信小程序 label 組件詳解及簡(jiǎn)單實(shí)例

    微信小程序 label 組件詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了微信小程序 label 組件詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 微信小程序 獲取javascript 里的數(shù)據(jù)

    微信小程序 獲取javascript 里的數(shù)據(jù)

    這篇文章主要介紹了微信小程序 獲取javascript 里的數(shù)據(jù)的相關(guān)資料,這里通過(guò)實(shí)例來(lái)說(shuō)明如何獲取javascript里的數(shù)據(jù),希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • 微信小程序的日期選擇器的實(shí)例詳解

    微信小程序的日期選擇器的實(shí)例詳解

    這篇文章主要介紹了微信小程序的日期選擇器的實(shí)例詳解的相關(guān)資料,希望通過(guò)本能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • 微信小程序 picker-view 組件詳解及簡(jiǎn)單實(shí)例

    微信小程序 picker-view 組件詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了微信小程序 picker-view 組件詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 解密效果

    解密效果

    解密效果...
    2006-06-06
  • 前端框架ECharts?dataset對(duì)數(shù)據(jù)可視化的高級(jí)管理

    前端框架ECharts?dataset對(duì)數(shù)據(jù)可視化的高級(jí)管理

    這篇文章主要為大家介紹了前端框架ECharts?dataset對(duì)數(shù)據(jù)可視化的高級(jí)管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • reduce探索lodash.reduce實(shí)現(xiàn)原理解析

    reduce探索lodash.reduce實(shí)現(xiàn)原理解析

    這篇文章主要為大家介紹了reduce探索lodash.reduce實(shí)現(xiàn)原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 關(guān)于js typeof 與 instanceof 判斷數(shù)據(jù)類型區(qū)別及開(kāi)發(fā)使用

    關(guān)于js typeof 與 instanceof 判斷數(shù)據(jù)類型區(qū)別及開(kāi)發(fā)使用

    我們經(jīng)常會(huì)遇到判斷一個(gè)變量的數(shù)據(jù)類型或該變量是否為空值的情況,你是如何去選擇判斷類型操作符的?本文來(lái)記錄一下我們開(kāi)發(fā)人員必須掌握關(guān)于 typeof 和 instanceof 的知識(shí)點(diǎn)及在開(kāi)發(fā)中的使用建議,同時(shí)在面試過(guò)程中也經(jīng)常會(huì)遇到這樣的問(wèn)題,需要的朋友可參考下文章內(nèi)容
    2021-10-10

最新評(píng)論

渭南市| 钟祥市| 高青县| 綦江县| 毕节市| 游戏| 浮山县| 大庆市| 元阳县| 甘洛县| 阳山县| 通辽市| 高碑店市| 塔河县| 郯城县| 中牟县| 靖江市| 江山市| 长海县| 南皮县| 陇西县| 景洪市| 长乐市| 宜川县| 乐亭县| 彝良县| 塔河县| 确山县| 福鼎市| 金阳县| 临颍县| 洪湖市| 永嘉县| 玛曲县| 治多县| 宝丰县| 全南县| 望奎县| 五寨县| 敦化市| 万源市|