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

JavaScript設(shè)計模式初探

 更新時間:2016年01月07日 11:58:25   作者:卡卡頌  
javascript設(shè)計模式在程序中經(jīng)常遇到,不同的設(shè)計模式都有各自的優(yōu)劣勢,本文給大家整理了七種設(shè)計模式,對js設(shè)計模式相關(guān)知識感興趣的朋友一起學習吧

目的:設(shè)計模式眾多,嘗試記錄下學到的不同設(shè)計模式的優(yōu)劣,方便以后查閱。

前言:半年前看高程的時候看到設(shè)計模式這章,云里霧里,不是看不明白,而是不明白為啥要如此麻煩只為創(chuàng)建一個對象。直到最近完成了自己第一個小項目,才體會到當代碼量多起來時沒有適當?shù)囊?guī)范與限制是多么大的災難。于是重新翻開高程,總結(jié)下幾種我學到的簡單設(shè)計模式的優(yōu)劣。

正文:本文一共介紹7種設(shè)計模式以及他們的應用場景、優(yōu)劣。

1.工廠模式

直接用函數(shù)來封裝對象,將對象作為返回值。

function person (name,age) {
  var obj=new Object();
  obj.name=name;
  obj.age=age;
  obj.sayName=function () {
    alert(this.name);
  };
  return obj;
}
var me=person("Su",25); 

缺點:對象識別的問題,所有創(chuàng)建出的對象都是Object的實例,不好區(qū)分。

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

function Person (name,age) {
  this.name=name;
  this.age=age;
  this.sayName=function () {
    alert(this.name);
  };
}
var me=new Person("Su",25); 

優(yōu)點:運用構(gòu)造函數(shù)模式可以將實例標示為一種特定的類型。

缺點:創(chuàng)建的對象的方法都是私有的,如果只是想產(chǎn)生公用的方法,會造成不必要的性能浪費。

3.原型模式

利用原型鏈繼承

function Person () {}
Person.prototype.name="Su";
Person.prototype.sayName=function () {
alert(this.name);}
var me =new Person(); 

缺點:所有屬性和方法被實例共享。當屬性、方法中包含引用類型的值時,修改一個實例的屬性、方法會影響所有其他實例。

4.原型+構(gòu)造函數(shù)模式

私有屬性、方法用構(gòu)造函數(shù)產(chǎn)生,公有屬性、方法用原型來繼承。融合兩種方法的優(yōu)點。

function Person (name,age) {
  this.name=name;
  this.age=age;
}
Person.prototype={
  constructor:Person,
  sayName:function () {
      alert(this.name);
  }
}
var me=new Person("Su",25); 

缺點:注意引用類型值的原型繼承。

ps:上圖代碼重寫了Person構(gòu)造函數(shù)的原型對象,將原型對象指針指向了一個對象,所以constructor屬性此時指向Object而不是Person,所以要顯式的將其設(shè)置成Person。

5.動態(tài)原型模式

本質(zhì)上還是構(gòu)造函數(shù),只在指定方法不存在時在原型對象中添加他。

function Person (name,age) {
  this.name=name;
  this.age=age;
  if (typeof this.sayName!="function") {
    Person.prototype.sayName=function () {
      alert(this.name);
    }
  }
}
var me =new Person("Su",25); 

缺點:不能使用對象字面量重寫原型對象。因為這會使實例的指針指向新的原型對象。也就是說上圖中原型對象中添加的sayName方法會失效。

6.寄生構(gòu)造函數(shù)模式

 調(diào)用時使用new操作符,除此以外我看不出和工廠模式有什么區(qū)別。望高人指點。

function person (name,age) {
  var obj=new Object();
  obj.name=name;
  obj.age=age;
  obj.sayName=function () {
    alert(this.name);
  };
  return obj;
}
var me=new person("Su",25); //這里使用new操作符 

7.穩(wěn)妥構(gòu)造函數(shù)模式

沒有公共屬性,禁用this,僅暴露必須的API用于數(shù)據(jù)調(diào)用。適用于對安全有需求的領(lǐng)域。

function Person (name) {
 var o=new Object();
 o.sayName=function () {
 alert(name);  
 }  
 return o;
}
var me=Person("Su"); 

如上代碼,只能通過sayName方法才能訪問到內(nèi)部的name屬性。

本文給大家介紹了七種設(shè)計模式,分別介紹了他們的優(yōu)缺點,希望對學習js設(shè)計模式相關(guān)知識有所幫助。

相關(guān)文章

  • Javascript加載導出3dm文件的示例詳解

    Javascript加載導出3dm文件的示例詳解

    3DM?文件格式是由?Rhinoceros?3D(簡稱?Rhino)軟件使用的原生文件格式,本文主要介紹了如何利用Javascript加載導出3dm文件,需要的可以參考下
    2024-11-11
  • Javascript 判斷兩個IP是否在同一網(wǎng)段實例代碼

    Javascript 判斷兩個IP是否在同一網(wǎng)段實例代碼

    javascript功能的強大之處是我們大家有目共睹的,幾天小編向大家介紹Javascript 判斷兩個IP是否在同一網(wǎng)段,感興趣的朋友可以參考一下
    2016-11-11
  • javascript加載導出3mf文件

    javascript加載導出3mf文件

    3MF是一種開放標準的文件格式,專門用于三維制造和打印,這篇文章主要介紹了如何使用JavaScript實現(xiàn)加載導出3mf文件,感興趣的可以了解下
    2024-11-11
  • js中各種時間日期格式之間的轉(zhuǎn)換代碼示例

    js中各種時間日期格式之間的轉(zhuǎn)換代碼示例

    這篇文章主要介紹了js中各種時間日期格式之間轉(zhuǎn)換的相關(guān)資料,還有獲取今天的年月日和計算兩個日期之間的相差天數(shù)的方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • flexigrid 參數(shù)說明

    flexigrid 參數(shù)說明

    flexigrid 參數(shù)說明,需要的朋友可以參考下。
    2010-11-11
  • 基于原生js實現(xiàn)判斷元素是否有指定class名

    基于原生js實現(xiàn)判斷元素是否有指定class名

    這篇文章主要介紹了基于原生js實現(xiàn)判斷元素是否有指定class名,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • JavaScript中獲取純正的undefined的方法

    JavaScript中獲取純正的undefined的方法

    這篇文章主要介紹了JavaScript中獲取純正的undefined的方法的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • TypeScript轉(zhuǎn)javaScript的方法示例

    TypeScript轉(zhuǎn)javaScript的方法示例

    本文主要介紹了TypeScript轉(zhuǎn)javaScript的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Auto.js自動收取自己和好友螞蟻森林能量腳本

    Auto.js自動收取自己和好友螞蟻森林能量腳本

    這篇文章主要為大家詳細介紹了Auto.js自動收取自己和好友螞蟻森林能量腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • JavaScript操作選擇對象的簡單實例

    JavaScript操作選擇對象的簡單實例

    下面小編就為大家?guī)硪黄狫avaScript操作選擇對象的簡單實例。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧
    2016-05-05

最新評論

剑河县| 南华县| 邯郸县| 姚安县| 克东县| 自贡市| 敦化市| 巴南区| 香港 | 大冶市| 容城县| 江阴市| 龙岩市| 呈贡县| 于田县| 昂仁县| 昭平县| 醴陵市| 周口市| 永顺县| 逊克县| 虹口区| 佛坪县| 浙江省| 石阡县| 松江区| 宁南县| 准格尔旗| 隆子县| 贵港市| 巴马| 吉安市| 佛教| 邻水| 平陆县| 金沙县| 铁岭县| 文昌市| 宁河县| 普宁市| 乌拉特中旗|