JS相关问题:如何正确访问代码所在的对象的属性?

纯萌新,对大佬来说这个问题可能很蠢,但要是您知道答案的话真心请您花一小点点时间帮帮我。。。

比方说我有一个类, 它有变量a、函数A、和函数B作为属性。然后比方说有这么一段代码:

A: function () {
    console.log(this.a);
    this.B();
},

B: function () {
    console.log(this.a);
},

start(){
  this.A();
},

start()里使用this.A()可以执行A。可以发现在start()里和A()里this指向的都是这个类实例化后的结果。
但是如果在A()里面调用B(),那么B()this就立刻对应window了,于是打印出undefined

所以怎么样使得一个类的函数不论怎么调用都能取得当前所在实例的属性呢?难道一定要上一级函数把会用到的值传给下一级吗?

(我已经找到这个帖子了。它直接把this赋给window的self,那确实是哪一级都可以访问。。。这是一个好尝试吗?感觉很丑陋)

我看了点JS的闭包概念,知道了如果把B定义在A里的话就能访问一切A能访问的属性,算是半个解决方案吧。。。

但还是觉得很奇怪。直接定义在类下面的B为什么在A里调用就不能访问类生成的Instance的属性?js就是这样的还是这只是cc.Class的问题?仍然等待解答。