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

js面向?qū)ο笾R妱?chuàng)建對象的幾種方式(工廠模式、構(gòu)造函數(shù)模式、原型模式)

 更新時間:2015年11月09日 09:32:14   投稿:mrr  
JS的語法非常靈活,簡單的對象創(chuàng)建就有好幾種不同的方法。這些過于靈活的地方有時候確實很讓人迷惑,那么今天我們就來梳理一下JS中常用的創(chuàng)建對象的幾種方法吧

在上篇文章給大家介紹了javascript面向?qū)ο蠡A(chǔ),本篇文章繼續(xù)深入學(xué)習(xí)javascript面向?qū)ο?,JS的語法非常靈活,簡單的對象創(chuàng)建就有好幾種不同的方法。這些過于靈活的地方有時候確實很讓人迷惑,那么今天我們就來梳理一下JS中常用的創(chuàng)建對象的幾種方法吧。

前言

雖然使用 Object構(gòu)造函數(shù) 或者使用 對象字面量 可以很方便的用來創(chuàng)建一個對象,但這種方式有一個明顯的缺點:使用一個接口創(chuàng)建多個對象會產(chǎn)生很多冗余的代碼。因此為了解決這個問題,人們開始使用以下幾種方式來常見對象。

工廠模式

該模式抽象了創(chuàng)建對象的具體過程,用函數(shù)來以特定接口創(chuàng)建對象的細節(jié)

 function cPerson(name,sex,age){
 var o = new Object();
 o.name = name;
 o.sex = sex;
 o.age = age;
 o.show = function(){
 console.log(this.name,this.age,this.sex);
 }
 return o;
}
 var p1 = cPerson('謙龍','男','100');
 p1.show();
 var p2 = cPerson('雛田','女','14');
 p2.show();

工廠模式測試

工廠方式的問題:使用工廠模式能夠創(chuàng)建一個包含所有信息的對象,可以無數(shù)次的調(diào)用的這個函數(shù)。雖然其解決了創(chuàng)建多個相似對象的問題,但卻沒有解決對象識別的問題(即如何得知一個對象的類型)

構(gòu)造函數(shù)模式

function CPerson(name,sex,age) {//注意這里 構(gòu)造函數(shù)首字母大寫
 this.name = name;
 this.sex = sex;
 this.age = age;
 this.show = function () {
 console.log(this.name, this.age, this.sex);
 }
}
var p1 = new CPerson('謙龍','男','100');
 p1.show();
var p2 = new CPerson('雛田','女','14');
 p2.show();

構(gòu)造函數(shù)模式測試

注意構(gòu)造函數(shù)與工廠模式有些不同的地方,如下

構(gòu)造函數(shù)首字母大寫

沒有顯式地創(chuàng)建對象

將屬性和方法賦值給了 this 對象

沒有return語句

而且以這種方式來調(diào)用構(gòu)造函數(shù)會大致經(jīng)歷一下 幾個步驟

創(chuàng)建一個新的對象

將構(gòu)造函數(shù)的作用域賦值給這個對象(因此this就指向了這個對象)

執(zhí)行構(gòu)造函數(shù)中的代碼(即給新對象添加屬性和方法的過程)

返回對象

注意:構(gòu)造函數(shù)其實和普通的函數(shù)沒有太大的差別,唯一的不同在于調(diào)用方式的不同。以下演示不同的幾種調(diào)用方式

 // 調(diào)用方式1 new 方式
 var p1 = new CPerson('謙龍','男','100');
 p1.show();//謙龍 100 男
 // 調(diào)用方式2 普通函數(shù)調(diào)用
 CPerson('謙龍','男','100');
 window.show()//謙龍 100 男 注意屬性和方法會被設(shè)置到window對象上
 // 調(diào)用方式3 在另一個對象的作用域中調(diào)用
 var obj = new Object();
 CPerson.call(obj,'謙龍','男','100');
 obj.show(); //謙龍 100 男 在obj的作用域

構(gòu)造函數(shù)的問題:使用構(gòu)造函數(shù)最主要的問題就是每個方法都要在每個實例上重新創(chuàng)建一次,p1與p2的都有show方法,但不是同一個Function的實例,因為function在js中也是一個對象。因此他們共有的show方法并不相等。

原型模式

每個函數(shù)都有一個prototype屬性,這個屬性是一個指針,指向一個對象。而這個對象的用途是 包含可以由 特定類型 的所有 實例 共享的屬性和方法。即調(diào)用構(gòu)造函數(shù)所創(chuàng)建的那個對象的 原型對象

好處是可以讓所有對象的實例共享他的屬性的方法。即無需在構(gòu)造函數(shù)中定義實例的信息

 function CPerson(){
}
CPerson.prototype.name='謙龍';
CPerson.prototype.sex='男';
CPerson.prototype.age=100;
CPerson.prototype.show=function(){
 console.log(this.name, this.age, this.sex);
}
var p1 = new CPerson();
 p1.show(); //謙龍 100 男
var p2 = new CPerson();
 p2.show();//謙龍 100 男
 console.log(p1.show == p2.show)//true

以上內(nèi)容是關(guān)于js面向?qū)ο笾R妱?chuàng)建對象的幾種方式(工廠模式、構(gòu)造函數(shù)模式、原型模式),希望大家喜歡。

相關(guān)文章

  • js或jquery動態(tài)輸出select option的實現(xiàn)代碼

    js或jquery動態(tài)輸出select option的實現(xiàn)代碼

    在 JavaScript 中動態(tài)生成 <option> 元素并添加到 <select> 下拉列表中,可以通過以下幾種方式實現(xiàn),以下是不同場景下的完整代碼示例
    2025-03-03
  • javascript中CheckBox全選終極方案

    javascript中CheckBox全選終極方案

    在javascript頁面中實現(xiàn)CheckBox或者Radio的選中狀態(tài)是一件很容易的事情,下面我們來給大家展示下在asp.net中使用javascript中CheckBox全選終極方案,有需要的小伙伴可以參考下。
    2015-05-05
  • Bootstrap實現(xiàn)導(dǎo)航欄的2種方式

    Bootstrap實現(xiàn)導(dǎo)航欄的2種方式

    這篇文章主要為大家詳細介紹了Bootstrap實現(xiàn)導(dǎo)航欄的2種方式,一是利用按鈕組實現(xiàn)、二是Bootstrap專門做了相應(yīng)的css類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 微信小程序人臉識別功能代碼實例

    微信小程序人臉識別功能代碼實例

    這篇文章主要介紹了微信小程序人臉識別功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 基于javascript實現(xiàn)日歷功能原理及代碼實例

    基于javascript實現(xiàn)日歷功能原理及代碼實例

    這篇文章主要介紹了基于javascript實現(xiàn)日歷效果原理及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 微信小程序?qū)崿F(xiàn)圖片上傳功能的思路與源碼

    微信小程序?qū)崿F(xiàn)圖片上傳功能的思路與源碼

    我們?nèi)粘i_發(fā)中經(jīng)常需要用到圖片上傳功能,這篇文章主要給大家介紹了關(guān)于微信小程序?qū)崿F(xiàn)圖片上傳功能的思路與源碼的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • 最新評論

    宜都市| 额敏县| 木兰县| 航空| 湄潭县| 视频| 祥云县| 钦州市| 博客| 汪清县| 韶山市| 锡林浩特市| 饶河县| 榆社县| 和静县| 宣恩县| 黎川县| 宜黄县| 互助| 汝阳县| 平舆县| 葵青区| 常宁市| 哈巴河县| 永嘉县| 吉首市| 乐亭县| 聂拉木县| 容城县| 泸定县| 武安市| 闽侯县| 隆子县| 石狮市| 昭平县| 乌什县| 高阳县| 凤山市| 龙州县| 三原县| 巴楚县|