Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
方法执行javascript_Javascript - Fatal编程技术网

方法执行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
。您不需要应用上下文或使用全局变量等。请参见此处: