Javascript中的包装函数

时间:2015-12-05 10:10:32

标签: javascript

我理解包装器会像

var str = 'Hello World'; // assigning string to a variable
console.log(str); // 'Hello World'

var str2 = new String('Hello World') // Creating a wrapper function
str2.valueOf() // 'Hello World'

通过该逻辑,以下示例也可以被视为包装函数

function SuperOuterAdd(a, b){
       console.log('Wrapper 2');
       return OuterAdd(a, b);
    }

    function OuterAdd(a, b){
       console.log('Wrapper 1');
       return add(a, b);
    }

    function add(a, b){
        return parseInt(a) + parseInt(b);
    }

3 个答案:

答案 0 :(得分:2)

JavaScript中没有包装函数的语言定义,并且您的代码new String('Hello World')是字符串对象的实例化 - 我不知道如何将其视为一个任何逻辑的包装函数都可以。

包装函数是一个设计概念,其中一个非常小的函数正在使用另一个函数为它做“工作”,有时使用一组稍微不同的参数。

例如:

function power(x, y) {
  var res = 1;
  while(y--) {
    res *= x;
  }

  return res;
}

function square(x) {
  return power(x, 2);
}

在上面的代码中square是一个包装函数。

答案 1 :(得分:0)

Wrappers是一个松散的术语,用于简单地返回一个没有计算的值的函数。当我们需要一个值时它们很有用,但不是马上就有用。当你定义它时,结果还没有准备好,或者你需要一些绑定来使函数起作用(使用this)。

您提供的示例都不是包装函数。第一个只是一个对象实例化(你甚至不是创建一个函数)。恰好,String构造函数可以将字符串文字作为参数,这意味着它可以像身份函数一样工作。在第二种情况下,它只是一些更复杂的装置,但它仍然可以调用和计算事物。

一般来说,包装函数在上下文中是非常无用的,并且它们主要是特定于Javascript的东西,但请考虑以下内容:

let foo = null;
fetch('/my/api/call').then(function(res) {
  foo = res;
  getFoo(); // => [your object]
});

getFoo(); // => null 

function getFoo() {
  return foo;
}

答案 2 :(得分:-2)

以下是示例:

function SimpleWrapper() {
    var self = this;
    initialize();

    function initialize() {
        self.SuperOuterAdd = SuperOuterAdd;
        self.OuterAdd = OuterAdd;
    }
    function SuperOuterAdd(a, b){
       console.log('Wrapper 2');
       return OuterAdd(a, b);
    }

    function OuterAdd(a, b){
       console.log('Wrapper 1');
       return _add(a, b);
    }

    function _add(a, b){
        return parseInt(a) + parseInt(b);
    }
}