阅读一些文章,其中说Javascript使用prototype来保持实例方法或属性只有一个副本。
我很困惑;为什么像C++、C#或Java这样的语言不需要原型?如果有数千个实例,这些语言会重复数千次方法吗?
发布于 2015-03-22 11:27:25
不,其他语言也有类似的机制来避免类实例上的方法重复。与其他语言相比,使用JavaScript时,这只是更公开/更手动。
发布于 2015-03-22 11:32:02
在上面提到的语言中,javascript中的class代替了prototype。请记住,这些语言是编译的,这意味着在执行之前,编译器需要遍历整个程序并收集所有元数据。指向成员函数的指针存储在特殊的内存表中,对象拥有的所有内容都是对该表的引用。此外,它们也是所谓的强类型语言。这意味着一旦定义了类的成员,就不能在运行时更改它。
Javascript绝对不是这样的。它更接近解释器。它只需要预编译一个函数,而不是整个程序。此外,javascript的动态性要求能够显式访问对象的类(原型)。您可以将javascript中的prototype视为C#中的反射
https://stackoverflow.com/questions/29190589
复制相似问题