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