国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

談談JavaScript中function多重理解

開發 前端
JavaScript 中的 function 有多重意義。它可能是一個構造器(constructor),承擔起對象模板的作用; 可能是對象的方法(method),負責向對象發送消息。還可能是函數,沒錯是函數,和對象沒有任何關系獨立存在的可以被調用的函數。

JavaScript 中的 function 有多重意義。它可能是一個構造器(constructor),承擔起對象模板的作用; 可能是對象的方法(method),負責向對象發送消息。還可能是函數,沒錯是函數,和對象沒有任何關系獨立存在的可以被調用的函數。

[[148922]]

由于語言設計者的妥協,在 JavaScript 加入了一些 class 相關的特性,以使 JavaScript 看起來確實象 Java,可以 “面向對象”。雖然 JavaScript 添加了 new 和 this, 但卻沒有 class (ES已加)。*** function 臨時擔負起 class 的任務。

語義1:作為構造器的 function

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

/**

 * 頁簽

 *

 * @class Tab

 * @param nav {string} 頁簽標題的class

 * @param content {string} 頁面內容的class

 *

 */

function Tab(nav, content) {

  this.nav = nav;

  this.content = content;

}

Tab.prototype.getNav = function() {

  return this.nav;

};

Tab.prototype.setNav = function(nav) {

  this.nav = nav;

};

Tab.prototype.add = function() {

};

// 創建對象

var tab = new Tab('tab-nav', 'tab-content');

  

這里定義了一個類 Tab,創建了一個對象 tab。以上使用了 function ,this, new。this, new 是常見的面向對象語言中的關鍵字, 這里的 function 則擔負傳統面向對象語言中的 class 作用。當然這時候標識符的命名一般遵循 “首字母大寫” 規則。

語義2:作為對象方法的 function

由于 JavaScript 中無需類也可以直接創建對象,因此有兩種方式給對象添加方法。***種先定義類,方法掛在原型上,如上例的 Tab,原型上有 getNav、setNav 和 add 方法。以下還有一種,直接在 function 內的 this 上添加方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

function Tab(nav, content) {

  this.nav = nav

  this.content = content

  this.getNav = function() {

    // ...

  }

  this.setNav = function() {

    // ...

  }

  this.add = function() {

    // ...

  }

}

  

這里 Tab 是語義, this.getNav/this.setNav/this.add 是語義,作為對象的方法。 另外,可以直接定義對象及其方法

1

2

3

4

5

6

7

8

9

10

11

12

13

var tab = {

  nav: '',

  content: '',

  getNav: function() {

    // ...

  },

  setNav: function() {

    // ...

  },

  add: function() {

    // ...

  }

}

  

tab.getNav/tab.setNav/tab.add 是語義,作為對象 tab 的方法。

語義3:作為獨立的函數

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

/*

 * 判斷對象是否是一個空對象

 * @param obj {Object}

 * @return {boolean}

 */

function isEmpty(obj) {

  for (var a in obj) {

    return false

  }

  return true

}

// 定義一個模塊

~function() {

  // 輔助函數

  function now() {

    return (new Date).getTime()

  }

  // 模塊邏輯...

}();

// 采用CommonJS規范的方式定義一個模塊

define(require, exports, moduel) {

  // 輔助函數

  function now() {

    return (new Date).getTime()

  }

  // 模塊邏輯...

})

  

isEmpty 作為一個全局函數存在,模塊定義里面的 now 則作為局部函數存在,無論 isEmpty 還是 now 這里的 function 都指函數,它不依賴與對象和類,可以獨立被調用。

語義4:匿名函數定義模塊

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

// 全局命名空間

var RUI = {}

// ajax.js

~function(R) {

  // 輔助函數...

  ajax = {

    request: function() {

      // ...

    }

    getJSON: function() {

      // ...

    }

    ...

  }

  // 暴露出模塊給 R

  R.ajax = ajax

}(RUI);

// event.js

~function(R) {

  // 輔助函數...

  // 事件模塊定義...

  // 暴露出模塊給 R

  R.event = event

}(RUI);

// dom.js

~function(R) {

  // 輔助函數...

  // DON模塊定義...

  // 暴露出模塊給 R

  R.dom = dom

}(RUI);

  

這里的匿名函數執行后把API對象暴露給了RUI,無論匿名函數內干了多少活,對應匿名函數外是看不到的,也是沒有必要去理會的。最終關心的是公開的 API 方法,只要了解這些方法的參數及意義就可以馬上使用它了。

語義5:匿名js函數處理某些特殊效果如處理一些數據又不想暴露過多的變量

1

2

3

4

5

6

7

8

9

10

11

// 判斷IE版本的hack方式

var IEVersion = function() {

  var undef, v =

  var div = document.createElement('div')

  var all = div.getElementsByTagName('i')

  while (

    div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',

    all[]

  );

  return v > ? v : undef

}();

  

最終只要一個結果 IEVersion,匿名函數內部用到了一些局部變量全部可以隔離開。這種方式對于一些臨時性的數據加工非常有效,緊湊。

總結:

JavaScript 是 Eich 花  天的時間設計出來的,本是一個短小緊湊的腳本/函數式語言,因為市場營銷的原因,為了迎合 Java,加入了一些類 Java 的面向對象特性(constructor, this, new)。 this,new 照搬過來, class 的功能卻交給了 function 來承擔。導致 JavaScript function 讓人迷惑,一會用來定義類,一會又作為方法或函數。另外一部分人還挖掘出它可以用來定義模塊等等。

這一切隨著 ES 的到來結束了,ES 中的保留字 “class” 終于被實現了,定義類一律推薦使用 class。另外還有 extend 關鍵字,基本把 “類式繼承” 都搞過來了。 Douglas 在 Nordic.js  大會上點評到 ES 最糟糕的設計之一就是 class,另外也不建議使用 this 和 new,這表明他依然贊成使用函數式語言方式去寫 JavaScript,而不是基于類的面向對象式。

以上內容是我個人對JavaScript中function的多重理解,有不同理解的朋友,歡迎分享,共同學習進步。

責任編輯:王雪燕 來源: 博客園
相關推薦

2024-08-27 12:36:33

2016-11-07 21:37:46

javascript過濾器filter

2012-02-06 13:52:33

JavaScript

2009-07-14 14:12:14

Javascript

2024-08-26 14:52:58

JavaScript循環機制

2022-09-06 11:13:16

接口PipelineHandler

2017-07-26 17:10:24

前端JavascriptThis

2012-12-25 09:38:41

JavaScript設計模式

2010-10-09 10:19:50

JavaScriptFunction

2023-11-28 12:25:02

多線程安全

2022-06-30 09:10:33

NoSQLHBaseRedis

2010-10-09 10:10:55

JavaScriptFunction對象

2020-08-23 11:32:21

JavaScript開發技術

2024-07-18 10:12:04

2022-08-16 09:03:01

JavaScript前端

2013-11-05 13:29:04

JavaScriptreplace

2022-09-28 16:37:59

SpringMVC框架

2017-06-02 09:47:29

網絡分層協議

2022-09-19 07:57:59

云服務互聯網基礎設施

2020-12-16 09:47:01

JavaScript箭頭函數開發
點贊
收藏

51CTO技術棧公眾號

亚洲一区二区三区爽爽爽爽爽| 亚洲人成欧美中文字幕| 欧美a级免费视频| 精品电影一区| 成人啪啪免费看| 蜜桃成人av| 久久99精品视频一区97| 日韩一级二级| 欧美日韩视频在线观看一区二区三区 | 夜夜嗨av色一区二区不卡| 婷婷在线视频| 色综合色狠狠天天综合色| 免费av播放| 亚洲欧美成人一区二区三区| 久久久国产欧美| 91视视频在线观看入口直接观看www| 国产四区在线观看| 国产在线视频一区二区三区| 欧美日韩一区二区三区在线视频| 国产精品magnet| 高清免费日韩| 午夜天堂精品久久久久| 国产精品大全| 99热这里只有精品8| 久99久在线| 免费一级片91| 黄色网址在线免费看| 国产精一品亚洲二区在线视频| 99精品一区二区三区的区别| 国产在线国偷精品产拍免费yy| 亚洲精美视频| 国产99久久久国产精品潘金| 久在线观看视频| 国产日韩欧美不卡| 黄色成人av| 日韩欧美中文在线| 国产精品久久一区二区三区不卡| 欧美精品乱码久久久久久| 国产网友自拍视频导航网站在线观看| 在线影视一区二区三区| 91小视频xxxx网站在线| 亚洲精品wwwww| 亚洲一区av| 国产成人免费av电影| 欧美久久久久| 色之综合天天综合色天天棕色| 国产精品系列在线播放| 国产激情在线观看视频| 一区二区三区四区视频精品免费 | 精品国产伦一区二区三区观看方式 | 伊人久久大香| 奇米影视亚洲狠狠色| 不卡一区2区| 欧美日免费三级在线| 国产欧美一区视频| av在线播放一区二区| 91嫩草免费看| 91香蕉视频在线| 性史性dvd影片农村毛片| 亚洲免费观看高清完整版在线观看| 久久99国产精品久久99大师 | 超碰在线99| 中文精品一区二区三区 | 成人一级视频在线观看| 日韩精品视频在线观看视频| 欧美刺激午夜性久久久久久久| 99ri日韩精品视频| 综合久久国产| 欧美在线首页| www污在线观看| 亚洲国产精品欧美一二99| 都市激情国产精品| 国产精品久久久久免费a∨| 国产精品一区二区在线看| 国产精品免费精品自在线观看| 日韩成人三级视频| 亚洲性生活视频| 99热免费精品在线观看| 成人一区二区不卡免费| 日本中文字幕在线看| 国产乱码精品一区二区三区四区| 日本高清无吗v一区| 日韩一区二区三区在线看| 国产欧美一区二区三区视频 | 欧美中日韩免费视频| 亚洲国产天堂久久综合网| 国产精品伦一区| 91蜜桃臀久久一区二区| 国产成人高潮免费观看精品| 久久久精品视频成人| 99久久婷婷国产综合精品电影| 最新欧美人z0oozo0| 高清无码一区二区在线观看吞精| 亚洲一区二区三区中文字幕在线| 美女羞羞视频在线观看| 欧美俄罗斯性视频| 久久精品日产第一区二区| 日本成人中文字幕在线| 欧美变态tickling挠脚心| 日韩久久精品| 国产福利一区视频| 日韩毛片在线观看| 精品成人久久| 羞羞的视频网站| 国产丝袜一区二区| 影音先锋久久资源网| 国产www在线观看| 久久国产精品久久久久久久久久| 美女视频一区二区三区| 久草视频视频在线播放| 日韩美女在线观看| 中文字幕欧美国产| 日韩国产大片| 日韩国产成人无码av毛片| 91精品欧美久久久久久动漫 | 日韩视频免费观看高清完整版| 视频在线不卡免费观看| 国产三级国产精品国产专区50| 亚洲人在线视频| 日韩精品一卡二卡三卡四卡无卡| 欧美女同网站| 国产日韩精品综合网站| 一区二区三区日韩欧美| 视频一区在线| 99精品视频播放| 日韩最新免费不卡| 国产一区二区免费视频| 伊人久久综合一区二区| 免费成人进口网站| 日韩精品丝袜在线| 激情成人午夜视频| 不卡一二三区| av磁力番号网| 日日骚av一区| 久久综合色综合88| av日韩在线播放| 色偷偷免费视频| 国产精品日本精品| 欧美三级欧美成人高清www| 欧美日韩午夜| 国产在线69| 一区二区在线观看网站| 国产亚洲精品久久久久久| 不卡的av网站| 欧美三级电影网址| 在线观看免费污视频| 国产精品视频一区二区高潮| 五月激情丁香一区二区三区| 亚洲经典一区| 日本视频在线观看| 宅男av一区二区三区| 中文字幕一区二区三区电影| 91老师国产黑色丝袜在线| 97久久综合精品久久久综合| 国产一级粉嫩xxxx| 51国偷自产一区二区三区| 3d动漫精品啪啪一区二区竹菊| 老司机一区二区| 欧美综合影院| 美日韩在线观看| 快播亚洲色图| 日日噜噜噜夜夜爽亚洲精品| 国产亚洲精品免费| 99久久久久| 美女尤物在线视频| 香港三级韩国三级日本三级| 国产福利精品视频| 91精品国产色综合久久久蜜香臀| 国产精品影视网| 亚洲永久精品唐人导航网址| 激情福利在线| 异国色恋浪漫潭| 69av在线视频| 在线播放视频一区| 成人性生交大片免费| 欧美精品一区二区久久| 色图在线观看| 鲁一鲁一鲁一鲁一av| 韩国成人动漫在线观看| 色哟哟入口国产精品| 亚洲一区二区欧美激情| 全国精品久久少妇| 国产精品男女| 午夜成年人在线免费视频| 国产aaaaa毛片| 精品久久久久久中文字幕动漫| 国产亚洲精品激情久久| 欧美日韩在线第一页| 国产综合成人久久大片91| 婷婷国产精品| 春色校园综合激情亚洲| 日韩一级理论片| 国偷自产av一区二区三区小尤奈| 这里只有精品在线播放| 午夜精品一区在线观看| 国产成人在线观看| 黄色精品网站| 亚洲精品动态| 国产私拍福利精品视频二区| 久草在线网址|