2012-06-21 34 views
1

任何人都可以向我解釋這段代碼嗎?什麼意思和如何使用它?在javascript中攔截的原型

Function.prototype.createInterceptor = function createInterceptor(fn) { 
     var scope = {}; 
     return function() { 
      if (fn.apply(scope, arguments)) { 
       return this.apply(scope, arguments); 
      } 
      else { 
       return null; 
      } 
     }; 
    }; 
    var interceptMe = function cube(x) { 
      console.info(x); 
      return Math.pow(x, 3); 
     }; 
    // 
    var cube = interceptMe.createInterceptor(function (x) { 
     return typeof x === "number"; 
    }); 

回答

6

的代碼不是功能性的是,所以我做了這個編輯:

Function.prototype.createInterceptor = function createInterceptor(fn) { 
    var scope = {}, 
     original = this; //<-- add this 
    return function() { 
     if (fn.apply(scope, arguments)) { 
      return original.apply(scope, arguments); 
     } 
     else { 
      return null; 
     } 
    }; 
}; 
var interceptMe = function cube(x) { 
     console.info(x); 
     return Math.pow(x, 3); 
    }; 
// 
var cube = interceptMe.createInterceptor(function (x) { 
    return typeof x === "number"; 
}); 

攔截功能驗證調用它之前是什麼傳遞給原有的功能,並返回null 如果沒看不到這些論點是有效的。如果參數有效,則調用原始功能 。

cube(3) //27 - the argument is valid so the original function is called 
cube("asd") //null - Not valid according to the interceptor so null is returned 
+0

喔集成電路IC .... 如果(fn.apply(範圍,自變量)){ 返回original.apply(範圍,自變量); } 那代碼呢?你能否更具體地表達它?謝謝。 – user430926

+0

@ user430926如果調用驗證器/攔截器函數('fn'),返回一個真實結果,然後調用原始函數('original')並返回結果。 ['.apply'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply)用於傳遞所有參數。 – Esailija