每个对象都有一个原型prototype对象,通过函数创建的对象也会拥有这个原型对象。

  原型是一个指向对象的指针。

  原型对象的作用:

    存储一些实例对象公用的方法或属性,也就是说一个构造函数中的公共方法或属性应该放入原型对象中

  原型对象中的参数:

    默认一个原型对象有一个方法constructor,即构造函数本身。

  原型对象和构造函数的关系:

    构造函数是造一个对象,原型对象即是为构造函数创建出的实例对象提供公共的属性和方法

  构造函数怎么找到自己的原型对象:

    使用属性prototype即可找到该原型对象,你可以为其添加公共方法或属性方便该构造函数的实例对象使用。

  实例对象怎么找到自己的原型对象:

    使用属性__proto__即可找到该实例对象的原型对象

  使用字面量创建出的对象可以调用其原型对象中的方法。

<script>"use strict";

    let array = [1, 2, 3];

    console.log(array);

</script>

JavaScript 原型与继承

  构造函数,实例对象,原型对象的关系。

JavaScript 原型与继承

获取原型对象

  如果是一个构造函数,你想获取到原型对象为其实例化的对象添加公共方法,可以使用属性prototype来获取。

  如果是一个已经实例化好的对象,你想获取到其原型对象可以使用属性__proto__来进行获取,也可以使用Object.getPrototypeOf()方法来进行获取。

<script>"use strict";

    function User() {  };  // 构造函数

    console.log(User.prototype); 

    let u1 = new User();

    console.log(u1.__proto__);
    console.log(Object.getPrototypeOf(u1));


    console.log(u1.__proto__ === User.prototype);  // true
    console.log(u1.__proto__ === Object.getPrototypeOf(u1));  // true
    console.log(User.prototype === Object.getPrototypeOf(u1));  // true
</script>

原型对象设置方法

  函数拥有多个原型,prototype 用于实例对象使用,__proto__用于函数自身当做对象时使用。

  注意函数本身也是一个实例对象,所以当将函数作为对象使用时使用__proto__为它设置方法。

  当函数作为构造函数时其供实例使用的方法应该存储在prototype中,这是为了大幅度节省内存。

  否则每一个实例对象都会创建出自己的方法。

<script>"use strict";

    function User() {  };  // 构造函数

    User.__proto__.show = function (){
        console.log("函数作为对象调用的方法...");
    };

    User.show();  // 函数作为对象调用的方法...
// =============

    User.prototype.show = function(){
        console.log("该函数的实例对象调用的方法...");
    };

    let u1 = new User();

    u1.show();  // 该函数的实例对象调用的方法...
    
</script>

  推荐使用prototype来设置方法,因为将函数作为对象来使用的场景不多见。

  设置方式有两种,第一种在原有的原型对象基础上增加新的方法,第二种是覆盖原本的原型对象,但是要注意添加参数constructor来指向构造函数。

<script>"use strict";

    function User() {  };  // 构造函数
// =========  在原有的原型对象基础上新增一个方法

    User.prototype.show = function(){
        console.log("该函数的实例对象调用的方法...");
    };

    let u1 = new User();

    u1.show();  // 该函数的实例对象调用的方法...
    
</script>
原型对象中单独新增方法

相关文章:

  • 2022-12-23
  • 2021-05-27
  • 2021-06-05
  • 2022-01-12
  • 2022-12-23
  • 2022-12-23
  • 2021-09-18
  • 2022-12-23
猜你喜欢
  • 2022-02-16
  • 2021-09-22
  • 2021-07-15
  • 2021-10-25
  • 2022-12-23
  • 2021-09-24
  • 2021-06-07
相关资源
相似解决方案