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

Javascript 之封裝(Package)

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

一、 構(gòu)造函數(shù)(Constructor)模式的封裝
為了解決從原型對(duì)象生成實(shí)例的問題,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("小黑","黑色","德國黑背");

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)存的問題。因?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)存的問題,有下面的解決方案,即將那些不變的屬性和方法,直接定義在構(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("小黑","黑色","德國黑背");

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è)方法用來判斷,某個(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()方法,用來判斷某一個(gè)屬性到底是本地屬性,還是繼承自prototype對(duì)象的屬性。

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

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

3.3 in運(yùn)算符

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

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

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

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

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

總結(jié)
以上就是這篇文章的全部內(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ì)開發(fā)者比較友好,可以理解枚舉就是一個(gè)字典,文章內(nèi)容圍繞TypeScript 枚舉類型展開內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • WebAssembly使用方法研究

    WebAssembly使用方法研究

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

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

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

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

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

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

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

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

    這篇文章主要介紹了微信小程序 picker-view 組件詳解及簡單實(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ū)別及開發(fā)使用

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

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

最新評(píng)論

仁寿县| 布拖县| 盐源县| 肇源县| 齐河县| 合阳县| 石家庄市| 临西县| 寿阳县| 柏乡县| 晋中市| 买车| 乌兰县| 涞源县| 尼勒克县| 崇文区| 师宗县| 东兰县| 虎林市| 勐海县| 从化市| 天镇县| 苍梧县| 屏东市| 南召县| 阿坝县| 长丰县| 犍为县| 军事| 馆陶县| 屏南县| 长顺县| 昌黎县| 竹北市| 平武县| 金川县| 广州市| 青神县| 开化县| 宁化县| 韶关市|