像这样更改参数[function.value(new value)]
Change the parameter like this [function.value(new-value)]
function add(n) {
return function(x) {
this.value = n;
return this.value + x;
}
}
var add3 = add(3);
var add4 = add(4);
我想知道是否可以重写上面的函数:允许修改第一个参数如下:
add3.value(1);
console.log(add3(4))
// 5
此外,如果没有传递参数,则value方法返回当前值:
add3.value(1);
console.log(add3.value())
// 1
函数只是对象,因此可以为其分配属性value
,其值是修改n
:的函数
function add(n) {
var result = function(x) {
return n + x;
};
result.value = function(x) {
if (typeof x === 'undefined') {
return n;
}
n = x;
};
return result;
}
我不知道你为什么要这么做,但这是可能的。
要使用您所描述的接口,您的内部函数需要返回一个带有"value"方法的对象。例如
function add (n) {
return {
value: function (x) {
x = x || 0;
return n + x;
}
};
}
但是,听起来你想做的是咖喱&部分应用。在这种情况下,返回函数可能更简单。
function add (n) {
return function (x) {
x = x || 0;
return n + x;
};
}
这样使用:
var add3 = add(3);
console.log(add3(4)); // output: 7
或者,默认值为:
var add4 = add(4);
console.log(add4()); // output: 4
类似于Felix的答案,但允许空输入,记住最后的值,并给它一个valueOf
,这样它就可以像数字一样使用了。
function adder(i) {
i || (i = 0);
var add = function (x) {
return i += (+x || 0); // += modifies i
};
add.value = function (x) {
return !x && x !== 0 ? i : i = (+x || 0); // if x falsy but not zero
};
add.valueOf = function () {
return i;
};
return add;
}
var add = adder();
add.value(1); // 1
add(4); // 5
add(5); // 10
add + 2; // 12, via valueOf
add(); // 10
相关文章:
- 在ember/handlers中使用value和valueBinding有什么区别
- 使用:new Image()控制加载html.src=html_URL
- 需要url导航从DropDown Value onClick按钮传递url变量
- 用Javascript在下拉列表中选择VALUE选项
- C#asp.net mvc Set CheckBoxFor已检查的具有Model Value的属性
- 如何在不使用 new 关键字的情况下从函数创建对象
- HTML Value finding
- Javascript GetElementByID has no value
- 如何获取文本框组的值,并使用jquery将它们放入(key:Value)数组中
- .value返回字符串,直到我将其保存到变量
- 为什么要做新的.Date()与new相差1小时.日期().到ISOString()
- “createImageData()”和“new ImageData(()”有何不同
- 返回值+new Date()与Date.now()是否不同
- JavaScript check value
- 使用javascript和css选择器获取value属性的内容
- HTML SELECT-使用JavaScript按VALUE更改所选选项
- 如果URL为(value),则使用css类
- new Number(value)在js中是如何工作的?
- Angular JS过滤器——如果new value为空,就不更新DOM值
- 像这样更改参数[function.value(new value)]