V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
HeFengzz
V2EX  ›  JavaScript

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

  •  
  •   HeFengzz · 2022-03-15 21:24:03 +08:00 · 1421 次点击
    这是一个创建于 995 天前的主题,其中的信息可能已经有所发展或是发生改变。
    实例 constructor 构造函数 constructor Object constructor Function constructor null 这样不行吗?
    thinkershare
        1
    thinkershare  
       2022-03-15 21:43:16 +08:00
    不知道你写的二啥, 后面一段非常奇怪, 这个是 "constructor Object constructor Function constructor null " 什么意思?
    JS 对象当然可以没有原型, 原型只是原来实现继承的. 就是解释器实现的一个魔法属性罢了.
    HeFengzz
        2
    HeFengzz  
    OP
       2022-03-15 22:14:59 +08:00
    @thinkershare 对不起我问了一个蠢问题,我实际上想知道 js 的继承和 java 的继承的实现有啥区别,JS 有个原型链的图,java 是不是也是一样的
    thinkershare
        3
    thinkershare  
       2022-03-15 22:39:41 +08:00
    原型继承和基于类的继承有本质的不同. 你将 JavaScript 的对象理解为一个字典就好了, 而 Java 这种基于类型的继承是非常复杂的, 需要考虑静态绑定, 动态绑定, 类型对象, 类型对象指针, 同步索引等等. 本质上就是性能问题, JavaScript 的继承就是一个从. __prototype__对象上递归向上查找属性(方法+索引器是比较特性的属性)一个设计, 因此在读取上内存可以共享原型链上的数据成员(写入不可以), 而 Java 这种基于类的数据是不共享的, 只有方法代码可以共享.
    obulks
        4
    obulks  
       2022-03-22 12:03:46 +08:00
    先说为什么要有 prototype 这个属性,此属性是用来 实现基于原型的继承 和 为其他对象提供共享属性,ECMAScript 语言规范的文档明指出了这一点,这是语言本身设计如此;其次他们的继承肯定是不一样的,Java 本身就是完全面向对象的语言,自己有类的概念,可以直接使用类的继承,使用类的各种特性,而 JavaScript 语言本身没有类,但可以利用原型和自身语言的特性来实现面向对象,类的继承和原型的继承这两种继承方式,他们之间其实没啥联系,单单说区别的话,直接看各自的实现原理得了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4496 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:05 · PVG 12:05 · LAX 20:05 · JFK 23:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.