关于“这个”的问题在 JavaScript 中

发布于 2024-10-31 11:34:26 字数 271 浏览 8 评论 0原文

这可能是一个新手问题。我使用 javascript 已有多年,但才开始“认真”对待它。我有一个关于“this”的问题

var defaults = {
    baseId : 'item_',
    baseName : this.baseId
}

console.log('defaults',defaults);

不确定为什么 defaults.baseName 是“未定义” 如何引用大括号中的内容?有可能吗,还是我真的必须输入“item_”两次?

This may be a newbie question. I've used javascript for years but have only started to get "serious" about it. I have a question about "this"

var defaults = {
    baseId : 'item_',
    baseName : this.baseId
}

console.log('defaults',defaults);

Not sure why defaults.baseName is "undefined" How does one reference stuff in the curly braces? Is it possible, or do I really have to type 'item_' twice?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

岛徒 2024-11-07 11:34:26

简单的答案是你无法做你想做的事。在对象字面量的解析/解释/评估(无论您想如何考虑)期间,它不存在,因此不能以任何方式引用它。

The simple answer is that you cannot do what you're trying to do. During the parse/interpretation/evaluation (however you want to think about it) of the object literal, it doesn't exist and so it can't be referred to in any way like that.

独行侠 2024-11-07 11:34:26

JavaScript 对象字面量是一种语法糖,因此它不起作用。

this; // at point A
var defaults = {
    baseId : 'item_',
    baseName : this.baseId
}

翻译为

this; // point A
var defaults = new Object();
defaults.baseId = 'item_';
defaults.baseName = this.baseId; // "this" here is same as "this" at point A

您可以使用 getter 和 setter。

{
   baseId: 'item_',
   get baseName() { return this.baseId; },
   set baseName(x) { this.baseId = x }
}

JavaScript object literal is a syntatic sugar therefore it does not work.

this; // at point A
var defaults = {
    baseId : 'item_',
    baseName : this.baseId
}

translates to

this; // point A
var defaults = new Object();
defaults.baseId = 'item_';
defaults.baseName = this.baseId; // "this" here is same as "this" at point A

You can use getters and setters.

{
   baseId: 'item_',
   get baseName() { return this.baseId; },
   set baseName(x) { this.baseId = x }
}
深白境迁sunset 2024-11-07 11:34:26

你可以这样做:

var defaults = {};
defaults.baseId = defaults.baseName = 'item_';

You could do this:

var defaults = {};
defaults.baseId = defaults.baseName = 'item_';
只是偏爱你 2024-11-07 11:34:26

您可以使用 function 来代替,创建 class 的等效项:

function defaults() {
   this.baseId = 'item_';
   this.baseName = this.baseId;
}

现在 this 将具有正确的上下文。

另一种选择是使用您的原始代码,将 baseName 设为一个函数:

var defaults = {
    baseId : 'item_',
    baseName : function() { return  this.baseId; }
};

感谢 Šime Vidas 的更正!

You can use function instead, creating the equivalent of class:

function defaults() {
   this.baseId = 'item_';
   this.baseName = this.baseId;
}

Now this will have the proper context.

Another option, using your original code, is making baseName a function:

var defaults = {
    baseId : 'item_',
    baseName : function() { return  this.baseId; }
};

Thanks Šime Vidas for the correction!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文