Я создал пример структуры, чтобы лучше понять поведение методов.
это ключевое слово относится к объекту метода. Как это;
const obj1 = {
x(param1, param2) {return param1 * param2},
y(param1, param2, param3) {return param1 * param2 * param3},
z () {
console.log(this)
console.log(this.x(10,20))
console.log(obj1.x(10,20))
return 'done'
/*
{ x: [Function: x], y: [Function: y], z: [Function: z] }
200
200
*/
}
}
Что делать, если мне нужно использовать такую структуру?
const obj2 = {
a: {
x(param1, param2) {return param1 * param2},
y(param1, param2, param3) {return param1 * param2 * param3},
},
b: {
p: 5,
z() {
console.log(this)
console.log(this.x(10,20)) // Fails because there is not a method which is called x inside **this**
console.log(obj2.a.x(10,20))
return 'done'
/*
{ x: [Function: x], y: [Function: y], z: [Function: z] }
TypeError
200
*/
}
}
}
Единственный способ, которым мы имеем для вызова другого метода внутри свойства, это? obj2.a.x (10,20)
Есть другие способы? Какие-либо лучшие практики на эту тему?
Может быть, это должен быть другой вопрос, но это супер связано, так что ...
Что, если я хочу использовать такие функции стрелок, как это;
const obj3 = {
x: (param1, param2) => param1 * param2,
y(param1, param2, param3) {return param1 * param2 * param3},
z: () => {
console.log(this)
console.log(obj3.x(10,20))
return 'done'
/*
{ }
TypeError
200
*/
}
}
В этом случае, когда я использую this , он возвращает пустой объект. Опять же я должен использовать obj3.x (10,20) для вызова метода x?
Написание самого внешнего имени объекта внутри объекта мне не кажется таким крутым, но я не смог найти никаких других решений. Жду ваших мнений по этому поводу!