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-我同意,这不是一个选框的例子,但它是我想到的最简单的例子,至少与演示概念相关。