成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【譯】我最喜歡的 JavaScript 設(shè)計(jì)模式

xuxueli / 603人閱讀

摘要:原文鏈接譯文原鏈譯我最喜歡的設(shè)計(jì)模式我最喜歡的設(shè)計(jì)模式我覺得聊一下我愛用的設(shè)計(jì)模式應(yīng)該很有意思。我是一步一步才定下來的,經(jīng)過一段時(shí)間從各種來源吸收和適應(yīng)直到達(dá)到一個(gè)能提供我所需的靈活性的模式。

原文鏈接:My Favorite JavaScript Design Pattern
譯文原鏈:【譯】我最喜歡的 JavaScript 設(shè)計(jì)模式

我最喜歡的 JavaScript 設(shè)計(jì)模式

我覺得聊一下我愛用的 JavaScript 設(shè)計(jì)模式應(yīng)該很有意思。我是一步一步才定下來的,經(jīng)過一段時(shí)間從各種來源吸收和適應(yīng)直到達(dá)到一個(gè)能提供我所需的靈活性的模式。

讓我給你看看概覽,然后再來看它是怎么形成的:

function MyScript(){}
(function()
{

  var THIS = this;

  function defined(x)
  {
    return typeof x != "undefined";
  }

  this.ready = false;

  this.init = function(
  {
    this.ready = true;
  };

  this.doSomething = function()
  {
  };   

  var options = {
      x : 123,
      y : "abc"
      };

  this.define = function(key, value)
  {
    if(defined(options[key]))
    {
      options[key] = value;
    }
  };

}).apply(MyScript);

如你在實(shí)例代碼中看到的,整體框架是一個(gè)函數(shù)直接量(function literal):

(function()
{
  ...

})();

函數(shù)直接量基本上就是一個(gè)自執(zhí)行域,相當(dāng)于定義一個(gè)有名的函數(shù)然后立即調(diào)用它:

function doSomething()
{
  ...
}

doSomething();

我最初開始使用函數(shù)直接量是為了封裝——任何格式的任何腳本都可以被封裝在那個(gè)閉包里,并且它有效地將它密封在私有域中,從而保護(hù)它不會(huì)與同一個(gè)域里的其它腳本或者數(shù)據(jù)沖突。在最后面的那一對(duì)括號(hào)就是在執(zhí)行這個(gè)域,就像其它函數(shù)一樣調(diào)用它。

但是如果,這個(gè)域通過使用 Function.apply 來執(zhí)行而不是全局調(diào)用,這可以讓它在一個(gè)可被外界引用的特定命名的域中執(zhí)行。

因此通過結(jié)合二者——?jiǎng)?chuàng)建一個(gè)命名函數(shù),然后在這個(gè)命名函數(shù)的域內(nèi)執(zhí)行一個(gè)函數(shù)直接量——我們就得到了一個(gè)一次性的可以構(gòu)成任何腳本的基礎(chǔ)的對(duì)象,它模擬了類似面向?qū)ο箢惖睦^承性質(zhì)。

內(nèi)在之美

看看第一個(gè)代碼示例,你就能看到封閉域結(jié)構(gòu)提供了什么樣的靈活性。當(dāng)然,這些你都可以在任何方法中做到,但是通過用這種方式包裝起來,我們就有了一個(gè)可以和任何命名域聯(lián)系起來的結(jié)構(gòu)體。

我們可以創(chuàng)建多個(gè)這樣的結(jié)構(gòu)體,然后將它們和同一個(gè)域聯(lián)系起來,這樣它們之間全部可以共享它們的公開數(shù)據(jù)。

不過在共享公開數(shù)據(jù)的同事,每一個(gè)(結(jié)構(gòu)體)也可以定義它自己的私有數(shù)據(jù)。下面是一個(gè)例子,在腳本的最上面:

var THIS = this;

我們創(chuàng)建了一個(gè)叫做 THIS 的私有變量,它指向這個(gè)函數(shù)域,并且可以在私有方法中使用——和用 self = this 來創(chuàng)建內(nèi)部域是一樣的招數(shù)。

通過同樣方式聲明的其他私有變量,如果他們定義常量數(shù)據(jù)的話,可以使用大寫傳統(tǒng)(不過用 const 而不是 var 來做聲明的方式應(yīng)該被避免,因?yàn)閷?duì)它的支持不是很好)。

私有方法可以用來提供內(nèi)部功能:

function defined(x)
{
  return typeof x != "undefined";
}

然后我們可以創(chuàng)建其他實(shí)例或者外界可以訪問的公開方法和屬性:

this.ready = false;

this.init = function()
{
  this.ready = true;
};

this.doSomething = function()
{
};

我們也可以創(chuàng)建特殊的值——私有但是可以公開定義,在這個(gè)例子中是通過公開的 define 方法;它的參數(shù)可以根據(jù)數(shù)據(jù)需要再進(jìn)行驗(yàn)證:

var options = {
  x : 123,
  y : "abc"
  };

this.define = function(key, value)
{
  if(defined(options[key]))
  {
    options[key] = value;
  }
};
封裝起來!

所有的這些特點(diǎn)讓這個(gè)結(jié)構(gòu)體對(duì)我非常有用。并且它封裝在一個(gè)整潔、自我執(zhí)行的單例中——一個(gè)容易引用、整合和使用的一次性對(duì)象。

所以你怎么想?這個(gè)模式眼熟嗎,或者你有什么其他喜歡用的?

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79859.html

相關(guān)文章

  • []10個(gè)驚人CSS和JavaScript動(dòng)畫logos例子

    摘要:任天堂的最新游戲的控制臺(tái)帶有一個(gè)輝煌的動(dòng)畫,他所有的商業(yè)廣告和這個(gè)示例都由創(chuàng)建。使用重新構(gòu)建任天堂開關(guān),同時(shí)使用動(dòng)畫化整個(gè)事物。 現(xiàn)在構(gòu)建一個(gè)HTML和CSS的動(dòng)畫logo比以前容易多了,配合更新的JavaScript庫可以進(jìn)一步推動(dòng)網(wǎng)絡(luò)動(dòng)畫的發(fā)展。 看看這個(gè)畫廊的10個(gè)令人難以置信的自定義動(dòng)畫logo,它們展示的是一些未知的實(shí)體或者世界知名品牌。 1、Flowers SVG Web...

    YFan 評(píng)論0 收藏0
  • 2017年前端該學(xué)些什么(

    摘要:原文鏈接前端圈快速發(fā)展的今天,我們習(xí)慣于去嘗試最新的技術(shù)并在互聯(lián)網(wǎng)上討論它們的優(yōu)劣。整理了一系列年值得學(xué)習(xí)的部分。在這兒,我特別推薦以下的課程所著的五本對(duì)我最有意義的編程書你喜歡我的推薦嗎你想在年學(xué)點(diǎn)什么 原文鏈接 前端圈快速發(fā)展的今天,我們習(xí)慣于去嘗試最新的技術(shù)并在互聯(lián)網(wǎng)上討論它們的優(yōu)劣。我并不是說我們不應(yīng)該這么做,我只是覺得我們是不是應(yīng)該慢下來,看看那些不常變的東西:它們能夠很好的...

    hatlonely 評(píng)論0 收藏0

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

0條評(píng)論

xuxueli

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<