Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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 o = { prop: 37, f: function () { return this.prop; } }; console.log(o.f()); // logs 37 var A = { prop: 37, f: function () { return A.prop; } }; console.log(o.f()); // logs 37

下面的代码会返回相同的结果吗?我真的不能理解这个关键词

var o = {
    prop: 37,
    f: function () {
        return this.prop;
    }
};

console.log(o.f()); // logs 37


var A = {
    prop: 37,
    f: function () {
        return A.prop;
    }
};

console.log(o.f()); // logs 37

是的,这两段代码将返回相同的结果

当函数作为对象的方法调用时,它的this设置为 调用该方法的对象

在这里,调用它的对象在这两种情况下是相同的

有关的文档可能会有所帮助

(我假设您打算在第二部分中调用
A.f()

是的,它们将返回相同的结果。第二个示例可能会使两个对象实例共享同一个函数变得困难,但在许多情况下,这并不重要

除了某些必须手动设置的“绑定”或“挂接”情况外,
可以在方法调用之前从dot确定


iamthis.callmethod()

您记录了两次
o.f()
。为什么您希望得到不同的结果?简短的回答是肯定的,因为您记录了两次
o.f()
。长答案也是肯定的,因为
this.prop
的计算结果是
o.prop
,与
A.prop
完全相同。在第二种情况下,do
var B=A;A=null;console.log(B.f())
。对第一个案例执行类似的操作。您现在看到区别了吗?它们是否有任何不同,我应该选择哪种方式?是的,它们将返回相同的内容。当您在第一部分中使用
this
时,您所做的就是调用o.prop。