На самом деле, вы должны использовать контексты.Пожалуйста, прочитайте больше о контекстах в JavaScript.Есть много сайтов.
В вашем случае вы можете назвать контекст
obj.funcA(() => {
let ctx = this;
console.log('A');
obj.funcA1(() => {
let ctxFncA1 = this // context of previous level... etc.
console.log('A1');
const x = 10;
});
// ... you get the point.
});
В общем, то, что вы пытаетесь сделать, это не "хорошо".Если вы создадите объектный класс, язык JavaScript может позволить вам делать что угодно, но вы не должны этого делать.
Возможно, вам стоит заняться программированием объектов на JavaScript (книга или учебный веб-сайт).
На самом деле у вас есть пример, описывающий почти то, что вы хотите: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let (Кодскопировать / вставить оттуда.)
var Thing;
{
let privateScope = new WeakMap();
let counter = 0;
Thing = function() {
this.someProperty = 'foo';
privateScope.set(this, {
hidden: ++counter,
});
};
Thing.prototype.showPublic = function() {
return this.someProperty;
};
Thing.prototype.showPrivate = function() {
return privateScope.get(this).hidden;
};
}
console.log(typeof privateScope);
// "undefined"
var thing = new Thing();
console.log(thing);
// Thing {someProperty: "foo"}
thing.showPublic();
// "foo"
thing.showPrivate();
// 1