gpt4 book ai didi

JavaScript:函数字典:一个函数可以从它的字典中引用函数吗?

转载 作者:搜寻专家 更新时间:2023-11-01 04:18:01 26 4
gpt4 key购买 nike

在下面的代码中,当setTimeout调用somethingUseful.thisUsefulThing时,是否可以引用somethingUseful.thatUsefulThing

var somethingUseful = {
thisUsefulThing: function() {
this.thatUsefulThing();
},

thatUsefulThing: function() {
console.log("I am useful!");
}
}

setTimeout(somethingUseful.thisUsefulThing, 1000);

现在,我收到此错误:

Uncaught TypeError: Object [object global] has no method 'thatUsefulThing'

最佳答案

简单地回答你的问题,是的,thisUsefulThing 可以访问 thatUsefulThing

但是当您的代码当前运行时,“this”实际上不是全局的,它是对对所有直接后代本身有用的东西的引用。

当我使用文字对象时,我通常通过名称而不是“this”来引用它们,因此在您的情况下,我会将“this.thatUsefulThing()”替换为 somethingUseful.thatUsefulThing()

为什么?因为无论如何它都适用于全局!

编辑:

正如 plalx 在他对我的回答的评论中指出的那样,实现此类(使用示例类成员)的最佳实践将使用功能类/原型(prototype),看起来像这样:

function SomethingUseful () {
this.member = 'I am a member';
}
SomethingUseful.prototype.thisUsefulThing = function () {
this.thatUsefulThing();
}
SomethingUseful.prototype.thatUsefulThing = function () {
console.log('I am useful, and ' + this.member);
}
usefulObject = new SomethingUseful();

usefulObject.thisUsefulThing(); // logs fine with access to this.member
setInterval(usefulObject.thisUsefulThing.bind(usefulObject), 1000); // has access to this.member through bind()

关于JavaScript:函数字典:一个函数可以从它的字典中引用函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554115/

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