Javascript 获取未定义的JSOO

Javascript 获取未定义的JSOO,javascript,javascript-objects,Javascript,Javascript Objects,相同的代码,但在一个代码块上出现访问错误 //获取未定义的错误 //输出:你好,马克,我的名字没有定义 var john={ 狂欢:“约翰”, 问候:功能(人){ 警惕(“嗨”+人+”,我的名字是“+这个.sProp”); } }; var fx=john.greet; 外汇(“马克”); //没有未定义的错误 //输出为“说出hito allsome字符串值” 变量myObject={ 存储过程:“某些字符串值”, numProp:2, callme:函数(arg){ 警惕(“打招呼”+ar

相同的代码,但在一个代码块上出现访问错误

//获取未定义的错误
//输出:你好,马克,我的名字没有定义
var john={
狂欢:“约翰”,
问候:功能(人){
警惕(“嗨”+人+”,我的名字是“+这个.sProp”);
}
};
var fx=john.greet;
外汇(“马克”);
//没有未定义的错误
//输出为“说出hito allsome字符串值”
变量myObject={
存储过程:“某些字符串值”,
numProp:2,
callme:函数(arg){
警惕(“打招呼”+arg+this.sProp);
}
};

myObject.callme(‘向所有人’)您的问题是:

var fx = john.greet;
fx("Mark");
当您像这样影响
john.greet
var
时,调用上下文变成:
window

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

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


可能重复@JamesThorpe对于所有问题,堆栈中都有答案,你可以看到许多线程注释可能重复,每个开发人员都在寻找解决方案,可能他们不像James和Juhana那样聪明,忽略我的无知。我为以下干扰道歉:var fx=john.greet.bind(john);外汇(“马克”);ReferenceError:第22行未定义jonh
john.greet("Mark")