Вопрос об "этом" в JavaScript
Это может быть вопрос новичка. Я использовал javascript в течение многих лет, но только начал "серьезно" относиться к этому. У меня вопрос по поводу "этого"
var defaults = {
baseId : 'item_',
baseName : this.baseId
}
console.log('defaults',defaults);
Не уверен, почему defaults.baseName является "неопределенным". Как можно ссылаться на фигурные скобки? Это возможно, или я действительно должен дважды напечатать 'item_'?
4 ответа
Объектный литерал 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
Вы можете использовать геттеры и сеттеры.
{
baseId: 'item_',
get baseName() { return this.baseId; },
set baseName(x) { this.baseId = x }
}
Ответ прост: вы не можете делать то, что пытаетесь сделать. Во время разбора / интерпретации / оценки (как бы вы ни думали об этом) литерала объекта, он не существует, и поэтому на него нельзя ссылаться каким-либо образом.
Вы могли бы сделать это:
var defaults = {};
defaults.baseId = defaults.baseName = 'item_';
Ты можешь использовать function
вместо этого, создавая эквивалент class
:
function defaults() {
this.baseId = 'item_';
this.baseName = this.baseId;
}
Сейчас this
будет иметь соответствующий контекст.
Другой вариант, используя ваш оригинальный код, делает baseName
функция:
var defaults = {
baseId : 'item_',
baseName : function() { return this.baseId; }
};
Спасибо Шиме Видасу за исправление!