获取未定义的 JSOO
Getting undefined JSOO
相同的代码,但在一个代码块上出现访问错误。
//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');
你的问题是这样的:
var fx = john.greet;
fx("Mark");
当您像这样将 john.greet
影响到 var
时,调用上下文变为:window
.
如果您想保留上下文,您必须使用:bind
或使用拥有对象立即调用该函数。
var fx = john.greet.bind(john)
fx("Mark")
或
john.greet("Mark")
相同的代码,但在一个代码块上出现访问错误。
//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');
你的问题是这样的:
var fx = john.greet;
fx("Mark");
当您像这样将 john.greet
影响到 var
时,调用上下文变为:window
.
如果您想保留上下文,您必须使用:bind
或使用拥有对象立即调用该函数。
var fx = john.greet.bind(john)
fx("Mark")
或
john.greet("Mark")