JavaScript方法调用

JavaScript方法调用,javascript,Javascript,在第61页第4.5节“JavaScript:权威指南,第6版”一书中,它说- 在方法调用中,作为 属性访问成为此参数的值,而 正在执行该函数 有人能用通俗易懂的英语解释一下这句话的意思吗?也许能举个例子? 我特别不知道“财产使用权的主体”是什么意思 非常感谢 在JavaScript中(目前),这取决于函数的调用方式,而不是函数的定义方式。弗拉纳根的意思是: foo.bar(); …在调用bar期间,此将引用foo引用的对象 如果您来自Java或C#等其他语言,您可能会想,“但肯定这个总是指ba

在第61页第4.5节“JavaScript:权威指南,第6版”一书中,它说-

在方法调用中,作为 属性访问成为
参数的值,而 正在执行该函数

有人能用通俗易懂的英语解释一下这句话的意思吗?也许能举个例子? 我特别不知道“财产使用权的主体”是什么意思

非常感谢

在JavaScript中(目前),
这取决于函数的调用方式,而不是函数的定义方式。弗拉纳根的意思是:

foo.bar();
…在调用
bar
期间,
将引用
foo
引用的对象

如果您来自Java或C#等其他语言,您可能会想,“但肯定
这个
总是指
bar
中的
foo
”,但JavaScript中并非如此。例如:

var f = foo.bar; // Get a reference to the function, but not calling it
f();             // Now we call it
在上面的例子中,
调用
bar
中的
这个
不是
foo
,它是全局对象(如果不是严格模式)或者
未定义的
(如果是)

更多(在我的博客上):


为了补充T.J.的答案,这里是:


现在,
result
的值是
'foo'
,因为函数已在对象o上调用,而在函数内部,
this
指调用函数的对象。

我对“this”的理解是,“this”是函数执行期间的上下文。
除非明确更改“this”,否则默认行为是函数执行期间的上下文是函数调用的上下文

第一种情况(最简单):

-->输出为“hello from[object Window]”,因为调用的上下文是全局对象,即窗口

第二种情况:现在我们定义一个对象,并将writeHelloFromThis添加到其中:

var anObject={};

anObject.writeHelloFromThis = writeHelloFromThis;
现在我们将writeHelloFromThis与一个对象作为上下文调用:

anObject.writeHelloFromThis();
-->输出是“hello from[object]”:这是函数调用的上下文:在本例中是一个对象

第三种情况,有点棘手:现在我们将把'anObject'的writeHelloFromThis存储到另一个变量中:

var anObjectsWriteHelloFromThis = anObject.writeHelloFromThis;
AnObjectsWriteHellofRom仅存储一个函数(=引用),而不知道任何关于“anObject”的信息。因此,如果我们呼吁:

 anObjectsWriteHelloFromThis();
输出将是“hello from[object Window]”,因为调用的上下文是全局对象,即窗口

最后一句话:如果这种处理方式对您来说似乎有限制,那么您是对的:这就是为什么一些函数方法:bind、call、apply允许您更改函数的上下文

最后一个例子:

 writeHelloFromThis.call(anObject);

将有输出“hello from[object]”,而不是windows,因为这里我们强制“this”成为一个对象。

谢谢T.J。!你能告诉我你说“对象被foo引用”是什么意思吗?你指的是什么“对象”?@ABogus:用一个具体的例子:
var a=[];a、 推动(“测试”)
在调用
push
期间,
将引用
a
引用的数组。对于我的
foo
示例,它可能是通过构造函数创建的对象,或者只是一个直接分配了
bar
函数的对象:
var foo={name:'foo',bar:function(){alert(“I'm”+this.name);}谢谢文森特!精彩的解释!不客气:-)过几天我有时间的话,我可以补充一两句。
 anObjectsWriteHelloFromThis();
 writeHelloFromThis.call(anObject);