相同的代码,但在一个代码块上获取访问错误。
//Getting undefined error
//output: Hi Mark, my name is undefined
var john = {
sProp: 'John',
greet: function(person) {
alert("Hi " + person + ", my name is " + this.sProp);
}
};
var fx = john.greet;
fx("Mark");
// no undefined error
// output is " Say hito allsome string value "
var myObject = {
sProp: 'some string value',
numProp: 2,
callme:function(arg){
alert("Say hi" + arg + this.sProp);
}
};
myObject.callme('to all');

答案 0 :(得分:3)
你问题中的问题是:
var fx = john.greet;
fx("Mark");
当您将john.greet
影响到var
时,调用上下文将变为:window
。
如果要保留上下文,则必须使用:bind
或立即使用拥有对象调用该函数。
var fx = john.greet.bind(john)
fx("Mark")
或者
john.greet("Mark")