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

首頁 > 開發 > JS > 正文

JavaScript設計模式初探

2024-05-06 16:27:26
字體:
來源:轉載
供稿:網友
javascript設計模式在程序中經常遇到,不同的設計模式都有各自的優劣勢,本文給大家整理了七種設計模式,對js設計模式相關知識感興趣的朋友一起學習吧
 

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

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

正文:本文一共介紹7種設計模式以及他們的應用場景、優劣。

1.工廠模式

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

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); 

缺點:對象識別的問題,所有創建出的對象都是Object的實例,不好區分。

2.構造函數模式

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

優點:運用構造函數模式可以將實例標示為一種特定的類型。

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

3.原型模式

利用原型鏈繼承

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

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

4.原型+構造函數模式

私有屬性、方法用構造函數產生,公有屬性、方法用原型來繼承。融合兩種方法的優點。

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構造函數的原型對象,將原型對象指針指向了一個對象,所以constructor屬性此時指向Object而不是Person,所以要顯式的將其設置成Person。

5.動態原型模式

本質上還是構造函數,只在指定方法不存在時在原型對象中添加他。

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.寄生構造函數模式

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

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.穩妥構造函數模式

沒有公共屬性,禁用this,僅暴露必須的API用于數據調用。適用于對安全有需求的領域。

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

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

本文給大家介紹了七種設計模式,分別介紹了他們的優缺點,希望對學習js設計模式相關知識有所幫助。



注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台东县| 迭部县| 友谊县| 铁岭市| 名山县| 天气| 乌兰浩特市| 溆浦县| 石楼县| 湛江市| 拜泉县| 吉隆县| 曲阳县| 桓台县| 贺兰县| 塔城市| 德昌县| 济阳县| 呼玛县| 罗山县| 玉龙| 新郑市| 上犹县| 日喀则市| 郸城县| 泽普县| 嘉义县| 邵武市| 江门市| 大石桥市| 惠来县| 武定县| 天水市| 湘西| 抚州市| 新龙县| 通渭县| 镇巴县| 彝良县| 昭苏县| 大理市|