gpt4 book ai didi

javascript - 如何使用 apply/call 闭包通过嵌套对象传递变量

转载 作者:行者123 更新时间:2023-12-03 08:44:53 25 4
gpt4 key购买 nike

即使在阅读了网站和此处的教程后,我仍然无法理解调用/应用的工作原理。我了解基 native 制,直到事情变得嵌套。如果不依赖 that = this,我将如何使用 call 函数而不是闭包来做到这一点?

var createPerson = function () {
var that = this;
var name;

return {
bio: {
name: function (name) {
that.name = name;
}
},
getInfo: {
getName: function () {
return that.name;
}
}
}

}

var john = createPerson();
john.bio.name("Johnathan");
console.log(john.getInfo.getName());

最佳答案

您所要做的就是在函数上使用 this 并使用返回的对象调用它。

var createPerson = function () {
return {
bio: {
name: function (name) {
this.name = name;
}
},
getInfo: {
getName: function () {
return this.name;
}
}
}
}
var john = createPerson();
john.bio.name.call(john, 'Jonathan');
console.log(person.getInfo.getName.call(john));

Function.prototype.call 将调用您的函数,johnthis

Function.prototype.bind 的示例:

var createPerson = function () {
var person = {
bio: {},
getInfo: {}
};
person.bio.name = Function.bind.call(function (name) {
this.name = name;
}, person);
person.getInfo.getName = Function.bind.call(function () {
return this.name;
}, person);
return person;
}

var john = createPerson();
john.bio.name("Johnathan");
console.log(john.getInfo.getName());

请注意,您可以轻松地将其替换为:

var createPerson = function () {
var person = {
bio: {},
getInfo: {}
};
person.bio.name = function (name) {
person.name = name;
}
person.getInfo.getName = function () {
return person.name;
}
return person;
}

var john = createPerson();
john.bio.name("Johnathan");
console.log(john.getInfo.getName());

关于javascript - 如何使用 apply/call 闭包通过嵌套对象传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32934522/

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