假设我有一个对象:
lapply
我在期待这个
Total = x$Total / toDivide[as.character(x$Date)]
返回var o = {
prop: 3,
method: function() {return this.prop}
}
,但返回(o.method)()
,表示undefined
在3
内设置为this
。为什么会这样?如果单独评估o
,它将评估为独立函数,因此我希望method
引用全局对象。例如,为什么存在差异:
(o.method)
我知道this
将使用(o.method)() vs (o.method || true)()
作为上下文,问题主要是关于首先像o.method()
那样访问函数然后调用它。 / p>
答案 0 :(得分:2)
这就是JavaScript的规则如何运作。除非你做一些扭曲,this
通常表示在调用它之前访问方法时.
之前的事情。在这种情况下,即o
。
以下陈述相同:
(o.method)();
o.method();
o.method.call(o);
o["method"]();
但是,如果你把这个方法放在别的东西上,它就会理解它所涉及的东西的含义:
var p = {prop: 42, method: o.method};
p.method(); // returns 42
var method = o.method;
var prop = 13;
method(); // returns 13
注意:随着JavaScript的发展远远超过最初的设计,人们意识到这可能不是this
最直观的工作方式,所以在ES6中,如果你使用"Arrow Functions"(又名Lambda函数)won't rebind this
。