0

我正在学习 javascript 匿名函数和范围,并试图理解一些东西,但已经变得有点卡住了。

我有以下三个功能:

var funcA = function (value) {
    test = value;
};

var funcB = function (value) {
    this.test = value;
};

var funcC = function (func,value) {
    var item = {};
    //single line invocation
}

我正在尝试编写一行 javascript(它说//single line invocation),以便以下两个调用的结果会有所不同,而不是具有相同的效果:

funcC(funcA, "set");
funcC(funcB, "set");

由于 funcB 是在引用this.test,所以它会更改本地(实例)值是有道理的,因此我们可以使用 funcC 中的“item”对象。我尝试做一些匿名函数“东西”,比如:

item.(function(func,value){func(value)})(func, value);

但是,就导致不同结果的陈述而言,我没有任何运气。(即,当我使用 node(.js) 运行我的代码时,testthis.test值都发生了变化)。

任何有助于更好地理解这一点的帮助都会很棒。

提前致谢,

典范RG

4

2 回答 2

2

您必须使用call来告诉它要处理的实例。

funcB.call(item, value);
于 2012-04-10T20:23:01.917 回答
0

您不能将匿名函数用作对象属性。你想做

var item = {"f": func};
item.f(value);
// item.test == value now

正确的?JavaScript 这样做的方式是.call()函数

func.call(item, value);
// with the difference that item has no "f" property here

您还可以使用call匿名函数表达式:

(function(val){ this.test = val; }).call(item, value);
// yet this equivalent looks much cleaner:
item.test = value;
于 2012-04-10T20:26:16.900 回答