Методы объекта Javascript: вызов другого метода внутри свойства (это ключевое слово) - PullRequest
0 голосов
/ 07 июля 2019

Я создал пример структуры, чтобы лучше понять поведение методов.

это ключевое слово относится к объекту метода. Как это;

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?

Написание самого внешнего имени объекта внутри объекта мне не кажется таким крутым, но я не смог найти никаких других решений. Жду ваших мнений по этому поводу!

...