我理解包装器会像
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);
}
答案 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);
}
}