最近在学习JS。因为我本人是pythonista,所以习惯用pythonic的思维思考语言逻辑。也因为pythonic的逻辑在JS里行不通,所以遇到了一个问题。这个问题使我对函数与方法的区别有了更深的理解,在这里记录与分享一下。
之前的理解
- 函数在类外面,方法在类里面(通过代码块的位置来区别函数与方法)
- js的this等价于python的self
- js里的方法都有一个bind的方法,用来绑定实例对象,使该方法能访问实例对象的属性
产生的疑问
- 为啥要绑定实例对象才能访问实例的属性?python里不用那么麻烦呀!
于是我做了一个代码实验,看看不bind会咋样,话不多说,上代码
# 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
对于熟悉python的人来说,这段代码再简单不过了。我的目的是通过对a.main的拷贝(是深拷贝哦),复用a.main的功能。但是在JS里却行不通。
// js
class A {
constructor(a) {
this.a = a;
}
main() {
console.log(this.a)
}
}
a = new A(1);
b = a.