获取未定义的 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")