Javascript 为什么没有绑定实例的同一对象不能工作?

Javascript 为什么没有绑定实例的同一对象不能工作?,javascript,python,Javascript,Python,我是一个正在学习js的蟒蛇学者 # python class A(): def __init__(self, a): self.a = a def main(self): print(self.a) a = A(1) b = a.main a.main() # 1 b() # 1 // js class A { constructor(a) { this.a = a; } main()

我是一个正在学习js的蟒蛇学者

# python
class A():
    def __init__(self, a):
        self.a = a

    def main(self):
        print(self.a)

a = A(1)
b = a.main
a.main()    # 1
b()    # 1



// js
class A {
    constructor(a) {
        this.a = a;
    }
    main() {
        console.log(this.a)
    }
}

a = new A(1);
b = a.main
console.log(Object.is(b, a.main)); // true
a.main();   // 1
b(); // TypeError: Cannot read property 'a' of undefined  # why is not 1?
我知道b需要绑定(a)如下:

但我的问题是python和js之间有什么不同?为什么python可以做到,而js不能。我想原因是python和js的底层实现机制不同,但我不知道。
提前感谢。

“但我的问题是python和js之间有什么不同?”因为它们是非常不同的语言,它们的工作方式非常不同。查看链接问题的答案,了解JavaScript的
是如何工作的。(短版本:在大多数情况下,对于非箭头函数,它是由函数的调用方式设置的,而不是函数的定义位置。)几年前,我也在这上面做了(非常贫血的博客:-)。非常感谢!读了你的博文后,我得出了这样的结论:因为JS中的对象没有方法,所以函数中的关键字“this”默认不会绑定到任何对象……对吧?基本上,是的。截至ES2015,JavaScript确实有不同于分配给属性的函数的方法,但是
这仍然取决于调用它们的方式。ES2015+还具有箭头功能,可以关闭此
,而不是对其进行绑定。
b = b.bind(a)