Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的包装函数_Javascript - Fatal编程技术网

Javascript中的包装函数

Javascript中的包装函数,javascript,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 SuperOu

我知道包装纸应该是这样的

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

JavaScript中没有包装函数的语言定义,从您的代码来看,
newstring('Hello World')
,是字符串对象的一个实例化-我不知道任何逻辑如何将其视为包装函数


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

例如:

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

  return res;
}

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

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

JavaScript中没有包装器函数的语言定义,从您的代码中,
newstring('Hello World')
是一个字符串对象的实例化-我根本不知道任何逻辑如何将其视为包装器函数


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

例如:

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

  return res;
}

function square(x) {
  return power(x, 2);
}
在上面的代码中,
square
是一个包装函数。

以下是示例:

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);
    }
}
以下是一个例子:

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

包装器是一个松散的术语,用于表示只返回值而不进行计算的函数。当我们需要一个值时,它们是有用的,但不是马上。当您定义它时,可能结果还没有准备好,或者您需要一些绑定才能使函数工作(使用
this

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

一般来说,包装器函数在上下文中是无用的,它们主要是JavaScript特定的东西,但是考虑如下:

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

getFoo(); // => null 

function getFoo() {
  return foo;
}

包装器是一个松散的术语,用于表示只返回值而不进行计算的函数。当我们需要一个值时,它们是有用的,但不是马上。当您定义它时,可能结果还没有准备好,或者您需要一些绑定才能使函数工作(使用
this

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

一般来说,包装器函数在上下文中是无用的,它们主要是JavaScript特定的东西,但是考虑如下:

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

getFoo(); // => null 

function getFoo() {
  return foo;
}

不,它不是包装器。不,它不是包装器。当然,这是一个非常松散的术语,但我不会将
square
称为包装器函数。这更像是一场比赛。问题是,包装函数是如此愚蠢,以至于很难在上下文之外提供有用的示例。它更多的是与语言的本质有关,而不是与实际的设计模式有关。@Guilherme-我同意,这不是一个选框示例,但它是我想到的最简单的示例,至少与演示概念有关。当然,这是一个非常松散的术语,但我不会将
square
称为包装函数。这更像是一场比赛。问题是,包装函数是如此愚蠢,以至于很难在上下文之外提供有用的示例。它更多的是与语言的本质有关,而不是与实际的设计模式有关。@Guillerme-我同意,这不是一个选框的例子,但它是我想到的最简单的例子,至少与演示概念相关。