是为什么 JS 要有原型对象?

2022-03-15 21:24:03 +08:00
 HeFengzz
实例 constructor 构造函数 constructor Object constructor Function constructor null 这样不行吗?
1413 次点击
所在节点    JavaScript
4 条回复
thinkershare
2022-03-15 21:43:16 +08:00
不知道你写的二啥, 后面一段非常奇怪, 这个是 "constructor Object constructor Function constructor null " 什么意思?
JS 对象当然可以没有原型, 原型只是原来实现继承的. 就是解释器实现的一个魔法属性罢了.
HeFengzz
2022-03-15 22:14:59 +08:00
@thinkershare 对不起我问了一个蠢问题,我实际上想知道 js 的继承和 java 的继承的实现有啥区别,JS 有个原型链的图,java 是不是也是一样的
thinkershare
2022-03-15 22:39:41 +08:00
原型继承和基于类的继承有本质的不同. 你将 JavaScript 的对象理解为一个字典就好了, 而 Java 这种基于类型的继承是非常复杂的, 需要考虑静态绑定, 动态绑定, 类型对象, 类型对象指针, 同步索引等等. 本质上就是性能问题, JavaScript 的继承就是一个从. __prototype__对象上递归向上查找属性(方法+索引器是比较特性的属性)一个设计, 因此在读取上内存可以共享原型链上的数据成员(写入不可以), 而 Java 这种基于类的数据是不共享的, 只有方法代码可以共享.
obulks
2022-03-22 12:03:46 +08:00
先说为什么要有 prototype 这个属性,此属性是用来 实现基于原型的继承 和 为其他对象提供共享属性,ECMAScript 语言规范的文档明指出了这一点,这是语言本身设计如此;其次他们的继承肯定是不一样的,Java 本身就是完全面向对象的语言,自己有类的概念,可以直接使用类的继承,使用类的各种特性,而 JavaScript 语言本身没有类,但可以利用原型和自身语言的特性来实现面向对象,类的继承和原型的继承这两种继承方式,他们之间其实没啥联系,单单说区别的话,直接看各自的实现原理得了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/840596

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX