如何在1行中调用对象上的匿名javascript函数?

时间:2012-04-10 20:19:12

标签: javascript node.js anonymous-function

我正在学习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);

然而,我对于导致不同结果的陈述没有任何好运。 (即当我使用节点(.js)运行我的代码时,testthis.test值都会发生变化。)

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

提前致谢,

ParagonRG

2 个答案:

答案 0 :(得分:2)

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

funcB.call(item, value);

答案 1 :(得分:0)

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

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

正确? JavaScript执行此操作的方式是.call() function

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;
相关问题