• js中prototype,__proto__,constructor之间的关系


      首先,我们需要了解三点:

      1. 只要创建一个任意新函数,就会根据一个prototype属性,该属性指向函数的原型对象;

      2. 每一个原型对象都会自动获得一个constructor属性,该属性只想prototype所在函数的指针;

      3. 当调用构造函数创建实例时,该实例内部将包含一个指向构造函数原型对象的指针,在大部分浏览器中用__proto__标识;

      从上面这三点我们可以了解到:

      正常情况下:prototype属性 -> 原型对象

            原型对象的constructor属性 -> 构造函数(即拥有prototype属性的函数)

            每一个创建的事例中都有一个__proto__(姑且这么认为)-> 构造函数的原型对象。

      以上只是正常情况下它们之间的关系。

      在原型上定义属性的方法可以分为两种:

    1 // 第一种:直接在原型对象上添加属性
    2     Animal.prototype.sayHi = function() {
    3         console.log("Hi!");
    4     }
     1     // 第二种:使用字面量创建一个新对象相当于new Object(),
     2     //        将新对象的引用赋值给Animal的prototype属性;
     3     //        该新对象是由Object()创建的实例,
     4     //        该实例的__proto__指向Object()的原型对象,也就是Object.prototype;
     5     // 因此:animal的__proto__最后指向新创建的对象
     6     //         constructor也指向Object构造函数
     7     Animal.prototype = {
     8         sayHi: function() {
     9             console.log("Hi!");
    10         }
    11     }
    12     var animal = new Animal();

      从上面第二段代码中,我们可以看出,我们可以构造函数的prototype的指向。

      并且我们知道,我们了解实例中的__proto__属性是指向原型对象的,因此,我们将一个对象的实例作为另一个对象的原型对象,就会形成一个原型链,也就可以实现简单的简单继承了。

     

  • 相关阅读:
    封装
    面向对象的思想
    Arrays工具类
    二分查找
    选择排序
    冒泡排序
    对象数组
    二维数组
    一维数组
    循环语句注意事项
  • 原文地址:https://www.cnblogs.com/diligentYe/p/6413132.html
Copyright © 2020-2023  润新知