gpt4 book ai didi

javascript - 在通话中了解这一点并应用

转载 作者:行者123 更新时间:2023-11-28 13:28:46 24 4
gpt4 key购买 nike

根据 call 和 apply 的定义,它们在给定的上下文中执行函数。但是,以下代码为 this

返回了 Object{}
function Animal() {
this.name = "Lion";
this.id = 1;
this.getInstance = function() {
return this;
}
}
var myObj2 = {};
var myObj = new Animal();
myObj.getInstance.call(myObj2); //Object {}

当我使用 self 存储 this 时,它返回 Animal 对象。

function Animal() {
self = this;
this.name = "Lion";
this.id = 1;
this.getInstance = function() {
return self;
}
}
var myObj2 = {};
var myObj = new Animal();
myObj.getInstance.call(myObj2); //Animal {name: "Lion", id: 1, getInstance: function}

在这两种情况下,我的理解是它应该返回myObj2。对此可能的解释是什么?

最佳答案

What is possible explanation for this?

self 在调用 var myObj = new Animal(); 时设置,此时 this 引用了一个新的 动物实例。

调用myObj.getInstance.call(myObj2);不会神奇地改变self的值。它仍然具有执行 new Animal() 时设置的值。

此外,每个函数都有“自己的”this,并且一个函数的 this 的值不会影响另一个函数的 this 的值,也不会对过去发生的分配产生任何影响(self = this;发生在调用getInstance之前并且在不同的上下文中)。

<小时/>

这是一个希望更简单但等效的示例,它不使用 this:

function Animal(foo) {
var self = foo;
this.getInstance = function(foo) {
return self;
}
}
var myObj2 = {};
var myObj = new Animal('abc');
myObj.getInstance('xyz'); // returns 'abc'

AnimalgetInstance 这两个函数都有一个参数 foo。当调用 Animal 时,self 被设置为 Animalfoo 的值 ("abc “)。

稍后我们使用不同的 foo 参数调用 getInstance("xyz")。但是,这不会影响 Animalfoo,也不会影响 self,因为我们只是读取 self,仍然是“abc”

关于javascript - 在通话中了解这一点并应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26786081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com