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