方法执行javascript
为什么这个名字不起作用?怎么解决方法执行javascript,javascript,Javascript,为什么这个名字不起作用?怎么解决 var john={ 姓名:'约翰', 问候:功能(人){ 警惕(“嗨”+人+”,我的名字是“+这个名字); } }; var fx=john.greet; 外汇(“马克”)//你好,Mark,我的名字是这个在本例中指的是JavaScript窗口对象,因为您实际上是在重新定义函数名。直接调用john.greet(“Mark”)会起作用,因为这将引用调用该方法的对象 在您的情况下,可以使用对象名称来引用其属性 请参阅本帖: 另一种可能的解决方案是更改函数本身的
var john={
姓名:'约翰',
问候:功能(人){
警惕(“嗨”+人+”,我的名字是“+这个名字);
}
};
var fx=john.greet;
外汇(“马克”)//你好,Mark,我的名字是
这个
在本例中指的是JavaScript窗口
对象,因为您实际上是在重新定义函数名。直接调用john.greet(“Mark”)
会起作用,因为这将引用调用该方法的对象
在您的情况下,可以使用对象名称来引用其属性
请参阅本帖:
另一种可能的解决方案是更改函数本身的上下文,这可以通过使用该方法来完成。有关详细信息,请参阅@Markus Stefanko的答案
var john={
姓名:'约翰',
问候:功能(人){
警惕(“嗨”+人+”,我的名字是“+约翰.姓名”);
}
};
var fx=john.greet;
外汇(“马克”)//你好,Mark,我的名字是
这个
在本例中指的是JavaScript窗口
对象,因为您实际上是在重新定义函数名。直接调用john.greet(“Mark”)
会起作用,因为这将引用调用该方法的对象
在您的情况下,可以使用对象名称来引用其属性
请参阅本帖:
另一种可能的解决方案是更改函数本身的上下文,这可以通过使用该方法来完成。有关详细信息,请参阅@Markus Stefanko的答案
var john={
姓名:'约翰',
问候:功能(人){
警惕(“嗨”+人+”,我的名字是“+约翰.姓名”);
}
};
var fx=john.greet;
外汇(“马克”)//你好,马克,我的名字是
你可以通过绑定fx
的上下文来解决这个问题,如下所示:
var fx = john.greet.bind(john);
通过这种方式,您明确表示fx将与john一起作为此
上下文工作。在此之前,您需要依靠实现为您选择上下文
(例如,您的原始代码在作为代码段运行时可以工作,但在浏览器上下文中无法工作。)您可以通过绑定fx
的this
上下文来解决此问题,如下所示:
var fx = john.greet.bind(john);
通过这种方式,您明确表示fx将与john一起作为此
上下文工作。在此之前,您需要依靠实现为您选择上下文
(例如,您的原始代码在作为代码段运行时可以工作,但在浏览器上下文中无法工作。)在这个实现中,我不喜欢依赖全局变量名的事实。绑定上下文是一个更安全的选择。这一点很好!我已经添加了一个MDN链接和对您答案的引用。在这个实现中,我不喜欢您依赖全局变量名的事实。绑定上下文是一个更安全的选择。这一点很好!我已经添加了一个MDN链接和对您答案的引用。我无法再回答这个问题,因为它已关闭,但在我看来,最好的答案是使用返回函数的getter
。您不需要应用上下文,也不需要使用全局VAR等。请参见此处:我无法回答,因为它已关闭,但在我看来,最好的答案是使用返回函数的getter
。您不需要应用上下文或使用全局变量等。请参见此处: