Один из способов получить доступ к вашему коду this
:
var obj = {
E: {},
W: {},
N: {},
S: {},
initMyself: function() {
Object.assign(this.E, {R: this.S, L: this.N});
Object.assign(this.W, {R: this.N, L: this.S});
Object.assign(this.N, {R: this.E, L: this.W});
Object.assign(this.S, {R: this.W, L: this.E});
}
};
obj.initMyself();
console.log(obj.E.R === obj.S);
Простое правило: если у вас есть obj.fn()
, то внутри кода fn()
this
связан с obj
. Но если у вас есть g = obj.fn;
, а затем g()
, код внутри g()
будет иметь this
, привязанный к глобальному объекту.
И ваше требование также может иметь ссылки "self". Вы устанавливаете E.R
для ссылки на S
, но S
еще не существует. Вот почему мой код сначала создал их, а затем Object.assign()
в значительной степени просто скопировал свойства.
Object.assign(this.E, {R: this.S, L: this.N});
это просто
this.E.R = this.S;
this.E.L = this.N;
Один из способов, которым ваш код мог бы быть это:
var orientations = (function() {
var obj = {
E: {},
W: {},
N: {},
S: {},
initMyself: function() {
Object.assign(this.E, {R: this.S, L: this.N});
Object.assign(this.W, {R: this.N, L: this.S});
Object.assign(this.N, {R: this.E, L: this.W});
Object.assign(this.S, {R: this.W, L: this.E});
}
};
obj.initMyself();
delete obj.initMyself;
return obj;
}());
console.log(orientations.E.R === orientations.S);