知识卡片

三层对象映射传统类成员概念

专业/工作 · 416.a

内容

用Java式思维理解JavaScript的类时,可以把”类字段/类方法 vs 实例字段/实例方法”这套概念映射到三种实际存在的对象上:构造函数对象本身的属性相当于类字段和类方法(所有实例共享同一份、不属于任何单个实例,如常量、工厂方法);原型对象的属性相当于实例方法(被所有实例继承、通过this操作各自的状态);而每个实例对象自身直接持有的属性才相当于实例字段(不共享,每个对象独立一份)。这个映射之所以成立,是因为JavaScript压根不区分字段和方法——属性值恰好是函数就表现为方法,恰好不是函数就表现为字段,类成员的种类不是语言强制的语法范畴,而是”这个属性挂在哪个对象上”这个位置决定的语义。

参考来源

《JavaScript权威指南(原书第6版)》第9章《类和模块》