<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • javascript的方法

    時間:2024-08-09 22:15:52 JavaScript 我要投稿

    javascript的方法

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

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

      2.(function(arg){})(window),匿名方法調(diào)用,在構(gòu)造命名空間時比較有用,后面的括號中的參數(shù)與匿名方法中的入?yún)⒁灰粚?/p>

      3.func.bind(sth)(),mozilla手冊中提到bind是在ECMA-262 5th Edition中新增的一個特性,這里單獨列出來作為一種調(diào)用方式是因為它彌補了直接調(diào)用中不能綁定作用域的缺陷。

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

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

      func()

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

      復制代碼 代碼如下:

      var a ={};

      var func = function(x) {

      console.log(this);

      };

      a.onclick = function() {

      var x = 100;

      func(x);

      };

      a.onclick();

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

      bind

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

      復制代碼 代碼如下:

      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就不會像無頭蒼蠅一樣到處亂跑啦。

      call & apply

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

      復制代碼 代碼如下:

      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對象中都有x,我們希望func能針對性的修改對應的x,但是直接調(diào)用只可能修改func作用域中的x,也就是a.x。修改一下代碼,就可以實現(xiàn)修改b.x目的

      復制代碼 代碼如下:

      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的方法】相關文章:

    JavaScript常用方法匯總10-25

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

    javascript跨域訪問的方法07-09

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

    JavaScript fontcolor方法入門實例07-07

    使用ajax操作JavaScript對象的方法09-28

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

    關于javascript尋找錯誤方法整理05-23

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

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

    主站蜘蛛池模板: 四虎成人精品永久免费AV| 久久亚洲国产精品一区二区| 91在线视频精品| 亚洲午夜福利精品无码| 国产精品主播一区二区| 久久精品嫩草影院| 国产精品亚洲片在线| 最新国产精品无码| 香蕉99久久国产综合精品宅男自| 国产精品麻豆入口| 午夜精品久视频在线观看| 国产精品成人va在线观看| 精品久久久久久无码中文字幕一区| 亚洲精品成人久久久| 蜜臀久久99精品久久久久久| 国产线视频精品免费观看视频| 99久久人人爽亚洲精品美女| 国产在线精品网址你懂的| 99久久精品国产麻豆| 国产精品9999久久久久| 国产午夜精品无码| 精品三级AV无码一区| 日韩精品内射视频免费观看| 亚洲国产另类久久久精品黑人| 亚洲精品成人在线| 亚洲国产精品成人AV无码久久综合影院| 久久亚洲国产成人精品无码区| 久久精品成人欧美大片| 狠狠精品干练久久久无码中文字幕| 国产精品亚洲w码日韩中文| 国产区精品高清在线观看| 国产亚洲精品自在线观看| 精品成人av一区二区三区| 国产亚洲精品拍拍拍拍拍| 99久久伊人精品综合观看| 99精品人妻少妇一区二区| 亚洲精品欧美日韩| 国产精品久久久99| 国产精品无码免费专区午夜| 精品国产黑色丝袜高跟鞋| 蜜臀av无码人妻精品|