了解JavaScript的继承实现方法

前 言

在JavaScript中,我们可以通过操作原型对象来模拟继承。
学习继承之前,我们需要先要了解以下JavaScript中的原型对象。


1. __prto__ 和 prototype 的区别

对 象具有 _proto_ 属性,可称为 “隐式原型” 。一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。
方 法这个特殊的对象,除了拥有上述的 _proto_ 属性,prototype 属性为方法独有。
当我们创建实例化对象时,对象中的 _proto_ 属性则默认指向函数 prototype 属性。

    function Person(name){
    
    
        this.name = name;
        this.sayName = function(){
    
    
            console.log(`我叫${
      
      this.name}`)
        }
    }
    var person1 = new test();//生成对象person1实例化Test构造方法
    var person2 = new test();
    /*
        对象t生成时会从Object继承一个__proto__属性,指向创造它的构造方法原型-->构造方法test。
    */
    t.__proto__ === test.prototype;// true 

代码运行机制:

  1. 创建一个自定义的构造函数后,它的原型对象默认只会有 contructor属性,其他属性和方法都是从Object继承而来的.

constructor属性返回对创建此对象的函数体。

  1. 当调用构造函数创建一个新实例后,该实例的内部将包含一个指针,指向构造函数的原型对象。ECMA5中称这个指针叫 [[prototype]]。虽然在脚本中没有标准的访问 [[prototype]] 方式,但Firefox、Safari和Chrome在每个对象上都支持一个属性__proto__。而在IE浏览器中,这个属性则是完全不可见的。不过要明确的真正一点就是,这个连接存在于实例对象和构造函数的原型对象(即构造方法名.prototype)之间,而不是存在于实例和构造函数之间。
    Image text

JS中的继承


利用prototype向原型数组添加数据

参考

知乎: [[https://zhuanlan.zhihu.com/p/92894937]]
CSDN:[[https://blog.csdn.net/q5706503/article/details/82947977]]

猜你喜欢

转载自blog.csdn.net/qq_35370002/article/details/107903014