获取未定义的JSOO

时间:2016-02-01 09:58:06

标签: javascript javascript-objects

相同的代码,但在一个代码块上获取访问错误。



//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');




1 个答案:

答案 0 :(得分:3)

你问题中的问题是:

var fx = john.greet;
fx("Mark");

当您将john.greet影响到var时,调用上下文将变为:window

如果要保留上下文,则必须使用:bind或立即使用拥有对象调用该函数。

var fx = john.greet.bind(john)
fx("Mark")

或者

john.greet("Mark")