gpt4 book ai didi

对象的 Javascript 作用域问题(this)

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

我有以下代码:

var tradingInterface = function() {

this.json = '';

this.init = function() {

$.get( '/whatever',{}, function(data) {
this.json = data;
// Rebuilds Everything
this.rebuildAll();
});
};

this.rebuildAll = function() {
//whatever here
};

};

为什么我在 init 函数中出现以下错误?

ReferenceError: this.rebuildAll is not defined
this.rebuildAll();

为什么我可以访问 this.json 而不会出现范围问题,但不能访问 this.rebuildAll?

我之前写过一个类似的帖子,但我被重定向到 How to access the correct `this` / context inside a callback?但我无法使其正常工作。

正如线程建议的那样,我尝试过:

var tradingInterface = function() {

this.json = '';
var self = this;
this.init = function() {

$.get( '/whatever',{}, function(data) {
this.json = data;
// Rebuilds Everything
self.rebuildAll();
});
};

this.rebuildAll = function() {
//whatever here
};

};

错误消失了,但是rebuildAll函数没有做它应该做的事情......

我需要一些帮助...

问候,

最佳答案

The error disappears but rebuildAll function is not doing what it should...

您没有解释 rebuildAll 应该做什么,所以我只能假设问题是您没有替换

this.json = data;

self.json = data;

$.get 回调中,this 引用了与 self 不同的对象。这一切都在question/answer you linked to中进行了解释。 .

<小时/>

Why can I access to this.json without scoping problems but not to this.rebuildAll?

您正在分配this.json。您(几乎)总是可以将属性分配给对象。但是,您正在阅读 this.rebuildAll 并尝试将其作为函数调用。由于 this.rebuildAllundefined,因此您无法调用它。

简化示例:

var obj = {};
obj.foo = 42; // works, foo didn't exist before
obj.bar = function() {}; // works, bar didn't exist before

obj.bar(); // works because bar exists
obj.baz(); // doesn't work, because baz doesn't exist

关于对象的 Javascript 作用域问题(this),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28728787/

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