js筆記--方法

   Ajavascript

   在一個對象中綁定函數,稱爲這個對象的方法:java

  例:app

   var xiaoming = {  name: '小明',   birth: 1990,  age: function () { var y = new Date().getFullYear(); return y - this.birth;  }   };   xiaoming.age; // function xiaoming.age()   xiaoming.age(); // 今年調用是25,明年調用就變成26了
其中在一個方法內部,this是一個特殊變量,它始終指向當前對象,也就是xiaoming這個變量。
若將函數寫在對象外部,單獨調用函數則會返回NaN,由於函數至關於全局函數,this指向了window
  例:
thisxiaoming
    function getAge() {     var y = new Date().getFullYear();     return y - this.birth;     }     var xiaoming = {     name: '小明',     birth: 1990,     age: getAge     };     xiaoming.age(); // 25, 正常結果     getAge(); // NaN


B apply

(1)改變this指向
 要指定函數的this指向哪一個對象,能夠用函數自己的apply方法,它接收兩個參數,第一個參數就是須要綁定的this變量,第二個參數是Array,表示函數自己的參數。
 用apply修復getAge()調用:
   例:

thisapplythisArrayapplygetAge()
     function getAge() {       var y = new Date().getFullYear();       return y - this.birth;     }     var xiaoming = {      name: '小明',      birth: 1990,      age: getAge     };     xiaoming.age(); // 25     getAge.apply(xiaoming, []); // 25, this指向xiaoming, 參數爲空

  另外一個與apply()相似的方法是call(),惟一區別是:函數

    • apply()把參數打包成Array再傳入;網站

    • call()把參數按順序傳入。this

 

  好比調用Math.max(3, 5, 4),分別用apply()call()實現以下:spa

   Math.max.apply(null, [3, 5, 4]); // 5    Math.max.call(null, 3, 5, 4); // 5

  對普通函數調用,咱們一般把this綁定爲nullcode

(2)動態改變函數的行爲對象

  例:ip

    想統計一下代碼一共調用了多少次parseInt()?

    解題思路:本身從新寫一個函數來替換js默認的parseInt()函數    

    var count = 0;
    var oldParseInt = parseInt; // 保存原函數
    window.parseInt = function () {
        count += 1;
        return oldParseInt.apply(null, arguments); // 調用原函數
    };摘抄自廖雪峯老師的官方網站
相關文章
相關標籤/搜索