成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

一、js設(shè)計(jì)模式-對(duì)癥下藥

SQC / 3218人閱讀

摘要:一個(gè)郵箱驗(yàn)證的功能函數(shù)的寫法有幾種簡(jiǎn)單的寫法分析這幾個(gè)函數(shù)可以認(rèn)為是幾個(gè)全局變量,類似于使用場(chǎng)景適用于功能比較單一獨(dú)立的邏輯優(yōu)點(diǎn)寫法用法都比較簡(jiǎn)單缺點(diǎn)此時(shí)的函數(shù)作為全局變量存在,在這種情況多的時(shí)候團(tuán)隊(duì)開發(fā)時(shí)容易被別人的變量覆蓋,而且從業(yè)務(wù)上

1、一個(gè)郵箱驗(yàn)證的功能函數(shù)的寫法有幾種?

(1) 簡(jiǎn)單的寫法

function checkName(){};
function checkEmail(){};
function checkPassword(){};

分析:這幾個(gè)函數(shù)可以認(rèn)為是幾個(gè)全局變量,類似于

var checkName = function(){};
var checkEmail = function(){};
var checkPassword = function(){};

使用場(chǎng)景:適用于功能比較單一、獨(dú)立的邏輯

優(yōu)點(diǎn):寫法、用法都比較簡(jiǎn)單

缺點(diǎn):此時(shí)的函數(shù)作為全局變量存在,在這種情況多的時(shí)候團(tuán)隊(duì)開發(fā)時(shí)容易被別人的變量覆蓋,而且從業(yè)務(wù)上講這幾個(gè)屬于一類函數(shù),所以放在一個(gè)對(duì)象里的話代碼的可讀性大大提高

(2) 作為一個(gè)對(duì)象的一個(gè)屬性的函數(shù)

1、 var CheckoutObject = {
      checkName: function(){},
      checkEmail: function(){},
      checkPassword: function(){},
    };

類似于

 2、var CheckoutObject = function(){};
    CheckoutObject.checkName = function(){};
    CheckoutObject.checkEmail = function(){};
    CheckoutObject.checkPassword = function(){};

使用場(chǎng)景:幾個(gè)功能有一定的邏輯或者類別上的關(guān)系,例如對(duì)表單的增刪改查都屬于對(duì)表單的操作

分析以及優(yōu)點(diǎn):這兩種方式都只有一個(gè)全局變量,極大了削弱了命名沖突的隱患,都能直接通過(guò)變量名稱CheckoutObject直接使用方法,區(qū)別是2屬于函數(shù),在函數(shù)內(nèi)部可以定義所有實(shí)例共有的屬性,更加符合類的特點(diǎn),更加具體的說(shuō)1是2的一種語(yǔ)法糖、只是2的一種實(shí)現(xiàn)方法

缺點(diǎn):1不太符合類的特點(diǎn)不能去實(shí)例化,雖然2可以通過(guò)new去創(chuàng)建對(duì)象但是創(chuàng)建的對(duì)象并不包括那些靜態(tài)方法,對(duì)于函數(shù)變量CheckoutObject復(fù)用性比較差,而且包含屬性并不獨(dú)立
(3) 函數(shù)返回對(duì)象,該對(duì)象包含郵箱校驗(yàn)的方法

  var CheckoutObject = function(){
    return {
      checkName: function(){},
      checkEmail: function(){},
      checkPassword: function(){},
    };
  };
  // 調(diào)用方法
  var test = new CheckoutObject();
  test.checkName();
  test.checkEmail();
  test.checkPassword();

使用場(chǎng)景:可以用來(lái)存放一些公共屬性,會(huì)被多人調(diào)用,每次都生成新的實(shí)例

分析:構(gòu)造函數(shù)返回一個(gè)對(duì)象,對(duì)象包含所需的屬性,每次new都是一個(gè)新對(duì)象,對(duì)象包含校驗(yàn)需要的屬性

優(yōu)點(diǎn):每個(gè)實(shí)例對(duì)象所包含的屬性都是獨(dú)立的

缺點(diǎn):test的對(duì)象和CheckoutObject沒什么關(guān)系,通過(guò)instanceof檢測(cè)不出來(lái),

(4) 更具有類特點(diǎn)的對(duì)象

var CheckoutObject = function(){
  this.checkName = function(){};
  this.checkEmail = function(){};
  this.checkPassword = function(){};
};
var test = new CheckoutObject();
console.log(test instanceof CheckoutObject); // true

特點(diǎn):實(shí)例對(duì)象的類型是構(gòu)造函數(shù),這樣更適用于封裝
(5) 對(duì)象間共享的方法
分析:上述創(chuàng)建的對(duì)象都是獨(dú)立的擁有自己的屬性,但是這些屬性是相同的,這樣造成了內(nèi)存的浪費(fèi)

var CheckoutObject = function(){};
CheckoutObject.prototype.checkName = function(){
  console.log("我叫小將");
};
var test1 = new CheckoutObject();
var test2 = new CheckoutObject();
test1.checkName(); // 我叫小將
test2.checkName(); // 我叫小將
console.log(test1.checkName === test2.checkName); // true

使用場(chǎng)景:各個(gè)實(shí)例都擁有這個(gè)屬性,這樣就可以提取到原型對(duì)象中,減小內(nèi)存損耗

優(yōu)點(diǎn):原型屬性被所有屬性所共享

缺點(diǎn):實(shí)例的屬性缺乏獨(dú)立性,所以獨(dú)立屬性和共享屬性應(yīng)該對(duì)癥下藥

(6) 更簡(jiǎn)單的鏈?zhǔn)秸{(diào)用

分析:好的代碼應(yīng)該精簡(jiǎn),能占一行絕不占兩行

var CheckoutObject = {
  checkName: function(){ return this },
  checkEmail: function(){ return this }
}
CheckoutObject.checkName().checkEmail()

共享的也可以

var CheckoutObject = function(){};
CheckoutObject.prototype.checkName = function(){
  console.log(this);
  return this;
};
CheckoutObject.checkName()

使用場(chǎng)景:適合一系列操作,例如本博文的校驗(yàn)

優(yōu)點(diǎn):調(diào)用方式簡(jiǎn)潔,易懂

缺點(diǎn):每個(gè)函數(shù)都必須返回當(dāng)前this,也就是this必須指向當(dāng)前執(zhí)行環(huán)境

2、原生對(duì)象(例如Array)添加獨(dú)立的方法

為原生對(duì)象添加屬性通常是通過(guò)原型對(duì)象

Array.prototype.remove = function(){};

缺點(diǎn):所有Array都具有了這個(gè)remove屬性造成了污染
優(yōu)點(diǎn):如果大部分實(shí)例都需要這個(gè)方法這就成了優(yōu)點(diǎn)了

Array.prototype.addMethod = function(name, fn){
  this[name] = fn;
};

這樣所有的Array都具有addMethod這個(gè)屬性,但是具體添加的方法是每個(gè)實(shí)例所共有,具體用那種看實(shí)際使用場(chǎng)景,而且可以在addMethod函數(shù)內(nèi)加一些其它的共享屬性

鏈?zhǔn)教砑雍褪褂?/p>

Function.prototype.addMethod = function(name, fn){
  console.log(this === Method);
  this.prototype[name] = fn;
  return this;
};
var Method = new Function();
Method.addMethod("checkName", function(){
  console.log("姓名檢查");
  return this;
}).addMethod("checkEmail", function(){
  console.log("郵箱檢查");
  return this;
})

var method = new Method();
method.checkName().checkEmail();

使用場(chǎng)景:為原型對(duì)象添加共享方法,但是具體執(zhí)行每個(gè)原型實(shí)例可以自己定義

優(yōu)點(diǎn):提供共享的添加函數(shù),具體添加的函數(shù)每個(gè)Method獨(dú)立,method再次共享

總結(jié):綜上可以看到每種方式都有其使用場(chǎng)景,要對(duì)癥下藥選擇最合適的模式

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/109087.html

相關(guān)文章

  • 對(duì)癥下藥,快速下載github單個(gè)文件夾

    摘要:如何從上下載單個(gè)文件夾然后再看了看插件這個(gè)插件能顯示樹狀目錄,還提供了單個(gè)文件的下載。單個(gè)文件本身就提供這個(gè)功能。 瞎扯淡的前言 前幾日遇到一個(gè)比較麻煩的事情,剛好周末有時(shí)間,不知道大家是否和我一樣,在github閱讀源碼的時(shí)候,只想看他的src目錄,當(dāng)然在github上面閱讀非常的麻煩,各種快捷都用不了,函數(shù)跳轉(zhuǎn),全局搜索….等等。但是。。。 關(guān)鍵來(lái)了,很有源碼整個(gè)項(xiàng)目都非常的大,介...

    RichardXG 評(píng)論0 收藏0
  • 看完離編寫高性能的JavaScript又近了

    摘要:加上內(nèi)部函數(shù)被返回,被其他對(duì)象引用,形成了閉包,因此對(duì)應(yīng)的變量對(duì)象存在于閉包函數(shù)的作用域鏈中。因此訪問(wèn)次數(shù)越多,費(fèi)用越高,頁(yè)面性能就會(huì)受到很大影響。盡管還主動(dòng)執(zhí)行了一次操作,曲線也沒有下降。 副標(biāo)題:常見的JavaScript內(nèi)存泄露 這是關(guān)于JavaScript內(nèi)存泄露相關(guān)的序列文章中一篇。由于時(shí)間有限更新進(jìn)度會(huì)有點(diǎn)慢,但會(huì)持續(xù)更新的。自己也在學(xué)習(xí)中,難免對(duì)某些知識(shí)點(diǎn)的理解不是很正確...

    Nekron 評(píng)論0 收藏0
  • JAVA團(tuán)隊(duì)開發(fā)手冊(cè) - 3. 開發(fā)流程

    摘要:開發(fā)流程對(duì)于一個(gè)項(xiàng)目,最大的問(wèn)題就是如何拆解為任務(wù),分配到合適的人手里,并在有限的時(shí)間內(nèi)完成它。但是我們把整個(gè)項(xiàng)目進(jìn)行拆解的話,每個(gè)星期進(jìn)行統(tǒng)計(jì)分析,就可以對(duì)癥下藥,提高開發(fā)效率。 開發(fā)流程 對(duì)于一個(gè)項(xiàng)目,最大的問(wèn)題就是如何拆解為任務(wù),分配到合適的人手里,并在有限的時(shí)間內(nèi)完成它。 就像做建筑工程一樣,其實(shí)做IT也是可以量化的,可能有的人砌磚砌得慢一些,有的人快一些。 但是我們把整個(gè)項(xiàng)目...

    魏憲會(huì) 評(píng)論0 收藏0
  • CSS Sticky 其實(shí)很簡(jiǎn)單

    摘要:大致步驟如下監(jiān)聽滾動(dòng)事件,計(jì)算目標(biāo)元素距離視口的距離。距離滿足條件時(shí),創(chuàng)建占位元素,修改目標(biāo)元素定位方式為。僅僅為了實(shí)現(xiàn)這個(gè)效果頁(yè)面上沒有其他內(nèi)容大動(dòng)干戈性價(jià)比很低。對(duì)癥下藥,讓滾動(dòng)發(fā)生在被誤匹配上的祖先元素內(nèi)即可恢復(fù)。為什么要寫這篇文章 Sticky 也不是新知識(shí)點(diǎn)了,寫這篇文章的原因是由于最近在實(shí)現(xiàn)效果的過(guò)程中,發(fā)現(xiàn)我對(duì) Sticky 的理解有偏差,代碼執(zhí)行結(jié)果不如預(yù)期。決定寫篇文章重新...

    番茄西紅柿 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<