• JavaScript之基于原型链的继承


    本文介绍下js的OOP中的继承。

    上图的要点为:Foo函数在创建时会自动生成内置属性prototype,而typeof Foo.prototype是object类型的。

    上图的要点为:Foo.prototype内置两个属性,constructor和__proto__。

    上图的要点为:

    1.Student使用Person.call(this,name,age)来调用父类的构造方法。

    2.实现继承,关键在于Student.prototype = Object.create(Person.prototype)。若使用Student.prototype = Person.prototype连接原型链,那么左右两边会指向同一个地方,从而使得Student.prototype无法实现个性化。

    3.Student.prototype.constructor本来是指向Person的,需要修改为Student,这并不是实现继承的必要条件,只是为了保持一致性。

    上图的要点为:

    1.原型链为bosn->Student.prototype->Person.prototype->Object.prototype->null。

    2.原型链上的每个节点都有一个内置属性__proto__指向其父节点,从而形成链。

    3.Object.prototype拥有toString、valueOf、hasOwnProperty等方法。

    上图的要点为:

    1.增加原型链上prototype的属性,会影响生成的对象,使其也拥有新属性。

    2.直接覆盖原型链上的prototype整体,不会影响原来生成的对象,但是会影响之后新建的对象。

    上图的要点为:

    1.修改Object.prototype来增加属性,会影响几乎所有对象,在for-in的时候也会输出属性。

    2.若要使for-in的时候不输出属性,可以用Object.defineProperty来解决,定义出来的属性的默认属性标签都是false,如enumerable、writable、configurable。

    3.由于enumerable默认是false,所以for-in不会输出Object.prototype新定义的属性。

  • 相关阅读:
    mmap文件修改内容的写回
    信号处理之物理信号和软件信号
    从printXX看tty设备(5)串口终端
    从printXX看tty设备(3)键盘输入处理
    LeetCode——Hamming Distance
    LeetCode——Add Strings
    计算树的高度和节点的个数
    LeetCode——Diameter of Binary Tree
    LeetCode——Number of Boomerangs
    九大排序算法总结
  • 原文地址:https://www.cnblogs.com/luoyihao/p/12266130.html
Copyright © 2020-2023  润新知