Javascript 为什么没有绑定实例的同一对象不能工作?
我是一个正在学习js的蟒蛇学者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()
# 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)