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 に答える