1

谁能向我解释这段代码?它的含义和使用方法是什么?

    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";
   });
4

1 回答 1

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
于 2012-06-21T10:49:28.743 回答