亚洲一级电影在线观看,九九精品无码专区免费,亚洲AV无码资源在线观看 ,欧美国产高清

javascript的方法

時(shí)間:2024-08-09 22:15:52 JavaScript 我要投稿

javascript的方法

  在javascript中,方法可以通過以下幾種方式執(zhí)行:

  1.func(),這是最直接最常見的調(diào)用方式,也符合一般人的思維邏輯,但是在某些情況下有一些不足,下面會(huì)解釋。

  2.(function(arg){})(window),匿名方法調(diào)用,在構(gòu)造命名空間時(shí)比較有用,后面的括號(hào)中的參數(shù)與匿名方法中的入?yún)⒁灰粚?duì)應(yīng)。

  3.func.bind(sth)(),mozilla手冊(cè)中提到bind是在ECMA-262 5th Edition中新增的一個(gè)特性,這里單獨(dú)列出來作為一種調(diào)用方式是因?yàn)樗鼜浹a(bǔ)了直接調(diào)用中不能綁定作用域的缺陷。

  4.func.call(),這是第二種調(diào)用方式,每個(gè)方法的原型中都定義了call方法,用來執(zhí)行當(dāng)前方法。

  5.func.apply(),call的雙胞胎兄弟。

  func()

  這是最常見的調(diào)用方式,在任何語言中隨處可見。func(x, y)可以傳入不同的參數(shù)。在某些語言,例如php,java中,這種調(diào)用足以解決一切問題。但是javascript是一門函數(shù)式語言,閉包的概念和一個(gè)奇怪的關(guān)鍵詞this決定了這種調(diào)用方式的不足。this應(yīng)該可以解釋為當(dāng)前代碼段的作用域,會(huì)隨著代碼執(zhí)行到不同的片段而改變,但是某些情況下我們不希望這個(gè)this被改變,例如綁定在某些dom上的事件,我們肯定不希望他們被調(diào)用的時(shí)候this被轉(zhuǎn)移到了window對(duì)象上,但有時(shí)候確實(shí)如此,再比如下面的代碼。

  復(fù)制代碼 代碼如下:

  var a ={};

  var func = function(x) {

  console.log(this);

  };

  a.onclick = function() {

  var x = 100;

  func(x);

  };

  a.onclick();

  可以把a(bǔ)想象成頁面中的一個(gè)鏈接,由于我們只是想將定義好的方法綁定到onclick事件上,而不是立刻調(diào)用它,而且這個(gè)方法擁有一個(gè)參數(shù),所以我們需要用一個(gè)匿名方法將他包起來傳遞給a的onclick事件。這樣就有了一個(gè)問題,func中的this變成了全局對(duì)象window,顯然我們并不希望如此。這個(gè)時(shí)候,使用func()這種直接調(diào)用的方式就不行了,于是我們需要將func外的this綁定到func方法上。于是就有了bind,call,apply方法。

  bind

  bind的目的非常簡(jiǎn)單,返回一個(gè)綁定了this對(duì)象的相同方法。上面的代碼修改一行就可以實(shí)現(xiàn)綁定this在a對(duì)象上目的。

  復(fù)制代碼 代碼如下:

  var a ={};

  var func = function(x) {

  console.log(this);

  };

  a.onclick = function() {

  var x = 100;

  func.bind(this)(x); // bind here

  };

  a.onclick();

  這樣,onclick事件的this就不會(huì)像無頭蒼蠅一樣到處亂跑啦。

  call & apply

  call和apply要放在一起講,因?yàn)樗麄儗?shí)在太像了。他們都支持多參數(shù),而且第一個(gè)參數(shù)都是即將綁定的this對(duì)象,第二個(gè)參數(shù)則是他們的區(qū)別所在,call使用獨(dú)立的參數(shù)作為調(diào)用方法的入?yún)ⅲ琣pply使用一個(gè)數(shù)組作為入?yún)ⅰS械臅r(shí)候我們并不是不想改變this對(duì)象,而是想人為的將他綁定到別的對(duì)象上,這個(gè)時(shí)候call和apply是很好用的。(并不是說不能用bind,不過貌似bind出現(xiàn)的比較晚,可能瀏覽器兼容性不好)。舉個(gè)栗子:

  復(fù)制代碼 代碼如下:

  a = {

  func: function() {

  this.x += 1;

  },

  x: 0

  };

  b = {

  a: a,

  x: 20

  };

  for(var i = 0; i < 10; i++){

  b.a.func();

  }

  console.log(a.x);

  console.log(b.x);

  上面的a和b對(duì)象中都有x,我們希望func能針對(duì)性的修改對(duì)應(yīng)的x,但是直接調(diào)用只可能修改func作用域中的x,也就是a.x。修改一下代碼,就可以實(shí)現(xiàn)修改b.x目的

  復(fù)制代碼 代碼如下:

  a = {

  func: function() {

  this.x += 1;

  },

  x: 0

  };

  b = {

  a: a,

  x: 20

  };

  for(var i = 0; i < 10; i++){

  b.a.func.call(b); // bind this to b

  }

  console.log(a.x);

  console.log(b.x);

【javascript的方法】相關(guān)文章:

JavaScript常用方法匯總10-25

JavaScript數(shù)組常用方法介紹09-04

javascript跨域訪問的方法07-09

javascript編程異常處理的方法08-04

JavaScript fontcolor方法入門實(shí)例07-07

使用ajax操作JavaScript對(duì)象的方法09-28

詳解JavaScript中的splice()使用方法08-20

關(guān)于javascript尋找錯(cuò)誤方法整理05-23

最常用的20個(gè)javascript方法函數(shù)09-10

Javascript中arguments對(duì)象的詳解和使用方法08-20

主站蜘蛛池模板: a亚洲天堂| 一本大道伊人av久久乱码 | 国产粉嫩小泬在线观看泬| 抚顺县| 国产精品久久久久网站| 精品视频无码一区二区三区| 国产浮力第一页草草影院| 精品国产三级在线观看| 久久亚洲AV成人无码高潮| 美女粉嫩啪啪高潮喷白浆动漫| 欧美人妖精品| 91精品啪在线观看国产91九色| 欧美午夜小视频| 欧美激情乱人伦| 亚洲日本中文字幕天堂网| 精品国产一区二区三区久久久狼| 色偷偷人人澡人人爽人人模| 99视频精品免视看| 久久久精品久久久久三级| 亚洲AⅤ无码国产精品| 无码成a∧人片在线播放| 亚洲国产成人精品无码区宅男| 国产精品igao视频网网址| 国产成人av无码永久免费| 九月丁香婷婷综合在线| 三区在线视频| 久久久噜噜噜久久中文字幕色伊伊 | 国产精品久久久久久影视不卡| 精品无码久久久久久久动漫| 女同久久精品国产99国| 精品国产肉丝袜久久首页| 午夜爽爽爽男女免费观看一区二区| 精品久久久无码人妻字幂| 亚洲免费福利在线视频| 伊人色合天天久久综合网| 久久99精品久久久久久野外| 毛片视频网址| 国产jizz| 婷婷丁香五月中文字幕| 在线无码va中文字幕无码| 国产69精品久久久久久人妻精品|