Я не уверен, что это даже связано с вашим вопросом, но вы можете попробовать это:
const obj1 = (src) => src._getMyObject();
const obj2 = (src) => src._getMySecondObject();
export default class MyClass {
_getMyObject() {
// some code
}
_getMySecondObject() {
// some code
}
_methodOne() {
const myObject = obj1(this);
const mySecondObject = obj2(this);
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
_methodTwo() {
const myObject = obj1(this);
const mySecondObject = obj2(this);
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
_methodThird() {
const myObject = obj1(this);
const mySecondObject = obj2(this);
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
}
Это меньше символов для ввода и obj1
и obj2
могут минимизировать, если это важно для вас.
Вы могли бы даже пойти дальше и создать псевдо-приватные функции для своего класса вместо использования подчеркивания.
const getMyObject = (src) => {
// The code that used to be in MyClass._getMyObject()
};
const getMySecondObject = (src) => {
// The code that used to be in MyClass._getMySecondObject()
};
export default class MyClass {
_methodOne() {
const myObject = getMyObject(this);
const mySecondObject = getMySecondObject(this);
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
_methodTwo() {
const myObject = getMyObject(this);
const mySecondObject = getMySecondObject(this);
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
_methodThird() {
const myObject = getMyObject(this);
const mySecondObject = getMySecondObject(this);
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
}
Или даже так:
const getMyObject = () => {
// `this` === the object just like when it was a function of the object
// The code that used to be in MyClass._getMyObject()
};
const getMySecondObject = () => {
// `this` === the object just like when it was a function of the object
// The code that used to be in MyClass._getMySecondObject()
};
export default class MyClass {
_methodOne() {
const myObject = getMyObject.bind(this)();
const mySecondObject = getMySecondObject.bind(this)();
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
_methodTwo() {
const myObject = getMyObject.bind(this)();
const mySecondObject = getMySecondObject.bind(this)();
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
_methodThird() {
const myObject = getMyObject.bind(this)();
const mySecondObject = getMySecondObject.bind(this)();
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
}
В этом примере благодаря bind(this)
вы создаете истинную приватную функцию для экземпляра класса, и каждый вызов getMyObject
и getMySecondObject
будет иметь соответствующее значение this
.
Еще один вариант - использовать деструктуризацию:
const getMyObjects = () => {
// `this` === the object just like when it was a function of the object
// The code that used to be in
// MyClass._getMyObject() and MyClass._getMySecondObject()
return {myObject, mySecondObject};
};
export default class MyClass {
_methodOne() {
const {myObject, mySecondObject} = getMyObjects.bind(this)();
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
_methodTwo() {
const {myObject, mySecondObject} = getMyObjects.bind(this)();
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
_methodThird() {
const {myObject, mySecondObject} = getMyObjects.bind(this)();
const lengthOfBoth = myObject.length + mySecondObject.length;
//some code
}
}
Это позволяет одной функции выполнять работу, которая была в _getMyObject
и _getMySecondObject
, и возвращать два ответа в одном объекте. Результаты объекта деструктурируются и помещаются в две переменные myObject
и mySecondObject
.
UPDATE
Извините. Я написал:
const myObject = getMyObject.bind(this);
когда я должен был написать const myObject = getMyObject.bind(this)();
Это было исправлено.