zoukankan      html  css  js  c++  java
  • JavaScript继承的最初设想

      JavaScript没有真正的类(class)和实例(instance),而是靠一种奇特的原型链模式,来实现继承。

      在Brendan Eich设计之初,Javascript里面都是对象,必须有一种机制,将所有对象联系起来。所以,Brendan Eich设计了"继承"。但是,他不打算引入"类"(class)的概念,因为一旦有了"类",Javascript就是一种完整的面向对象编程语言了,但这样显得太过于正式,增加了初学者的入门门槛。

      C++和Java都是通过new一个类来生成实例,因此,他也把new命令引入了Javascript。考虑到C++和Java使用new命令时,都会调用"类"的构造函数(constructor)。为了让JavaScript更加简单易上手,他就做了一个简化的设计,在Javascript语言中,new命令后面跟的不是类,而直接就是构造函数。

      new运算符可以方便地将构造函数转化成实例对象,但是,生成的对象在内存中都是彼此独立的,不能共享数据,造成了内存的浪费。

      考虑到这一点,Brendan Eich决定在实例对象的源头,即构造函数中加入一个prototype属性,这个属性包含一个对象。所有实例对象需要共享的属性和方法,都放在这个对象里面;那些不需要共享的属性和方法,就放在构造函数里面。

      在构造函数的每一次实例化过程中,都会把自身的prototype对象的指针放入实例对象的__proto__属性中,相当于把自身的共享对象地址发给了每一个实例对象。这样看起来,实例对象就好像从构造函数中“继承”了prototype对象一样。

  • 相关阅读:
    Java实现各种排序算法
    Memcached学习笔记
    S.O.L.I.D 原则
    设计模式之Bridge
    UML建模工具比较
    UML建模
    Ps经典实例教程3000例
    ps视频教程全集
    自己做到了吗?
    记事本开发Java代码注意要点
  • 原文地址:https://www.cnblogs.com/zhangnan35/p/10961990.html
Copyright © 2011-2022 走看看