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

首頁 > 語言 > JavaScript > 正文

Javascript 之封裝(Package)

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

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

function Dog(name,color,species){this.name = name;this.color = color;this.species = species;this.type = "犬科動物";}

生成實例對象如下:

var dog1 = new Dog("大黃","黃色","中華田園犬");var dog2 = new Dog("小黑","黑色","德國黑背");alert(dog1.name); //大黃alert(dog2.color); //黑色這時dog1和dog2會自動含有一個constructor屬性,指向它們的構造函數。alert(dog1.constructor == Dog); //truealert(dog2.constructor == Dog); //trueJavascript還提供了一個instanceof運算符,驗證原型對象與實例對象之間的關系。alert(dog1 instanceof Dog); //truealert(dog2 instanceof Dog); //true

但是,構造函數模式也存在浪費內存的問題。因為對于每一個實例對象,type屬性都是一樣的內容,每生成一個實例對象,都必須為重復的內容多分配一次內存,這樣既不節省,也缺乏效率。因此,我們應該想出一種讓type這樣的屬性在內存中只生成一次,并且所有實例都指向這個內存地址的方法。

二、 構造函數結合原型屬性(Prototype)模式的封裝
針對構造函數方法會浪費內存的問題,有下面的解決方案,即將那些不變的屬性和方法,直接定義在構造函數的Prototype對象上。

function Dog(name,color,species){this.name = name;this.color = color;this.species = species;}Dog.prototype.type = "犬科動物";

生成實例對象如下:

var dog1 = new Dog("大黃","黃色","中華田園犬");var dog2 = new Dog("小黑","黑色","德國黑背");alert(dog1.type); //犬科動物

這時所有實例的type屬性,其實都是同一個內存地址,指向prototype對象,因此就提高了運行效率。


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

3.1 isPrototypeOf()

這個方法用來判斷,某個proptotype對象和某個實例之間的關系。

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

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

3.2 hasOwnProperty()

每個實例對象都有一個hasOwnProperty()方法,用來判斷某一個屬性到底是本地屬性,還是繼承自prototype對象的屬性。

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

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

3.3 in運算符

in運算符可以用來判斷,某個實例是否含有某個屬性,不管是不是本地屬性。

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

圖片精選

主站蜘蛛池模板: 辉县市| 邵阳县| 泽普县| 白银市| 瓮安县| 内黄县| 阜平县| 晋宁县| 军事| 凌海市| 缙云县| 饶河县| 池州市| 讷河市| 景洪市| 涟源市| 淳安县| 岗巴县| 寻乌县| 邵东县| 侯马市| 成都市| 浪卡子县| 鄯善县| 开阳县| 北川| 新源县| 垦利县| 扶绥县| 九江市| 万载县| 岳阳县| 五原县| 敖汉旗| 平邑县| 合作市| 石楼县| 峨边| 五指山市| 昌图县| 阳原县|