我正在学习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)运行我的代码时,test
和this.test
值都会发生变化。)
任何有助于更好地理解这一点的帮助都会很棒。
提前致谢,
ParagonRG
答案 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;