什么是Js原型?


学习目标:
认识什么js是原型,原型、构成函数、实例对象关系;原型应用范围。

什么是原型


函数有原型,函数有一个属性叫prototype,函数的这个原型指向一个对象,这个对象叫原型对象。这个原型对象有一个constructor属性,指向这个函数本身。

     function  Animal() {

        }
        console.dir(Animal);

在这里插入图片描述
实例对象也存在原型,实例对象存在原型对象是__proto__,__proto__一般被叫隐身原型,这个隐身原型有一个constructor属性,该属性指向创建该实例的构造函数。

  function  Animal() {

        }
        var animal=new Animal();
        console.dir(animal);

在这里插入图片描述

构造函数、实例对象和原型直接关系

构造函数和实例对象关系

在每一个实例对象中的__proto__中同时有一个 constructor 属性,该属性指向创建该实例的构造函数:

 function  Animal() {

        }
        var animal1=new Animal();
        var animal2=new Animal();
        console.log(animal1.constructor==Animal); //输出结果是true
        console.log(animal2.constructor==Animal); //输出结果是true
        console.log(animal1.constructor==animal1.constructor); //输出结果是true

实例对象__proto__和构造函数prototype关系

在每一个实例对象中的__proto__指向构造函数中prototype 两个是相等的。

   function  Animal() {

        }
        var animal1=new Animal();

        console.log(animal1.__proto__==Animal.prototype); //输出结果是true

构造函数,prototype原型对象,实例对象,proto,constructor,直接关系

在这里插入图片描述

原型作用

  • 原型作用之一:数据共享,节省内存空间
  • 原型作用之二:为了实现继承

原型如何数据共享,节约内存空间

JavaScript 面向对象编程

原型如何实现继承

比如,现在有一个"动物"对象的构造函数。

function Animal(){
    this.species = "动物";
  }

还有一个"猫"对象的构造函数。

 function Cat(name,color){
    this.name = name;
    this.color = color;
  }

怎样才能使"猫"继承"动物"呢?
如果"猫"的prototype对象,指向一个Animal的实例,那么所有"猫"的实例,就能继承Animal了。

    Cat.prototype = new Animal();
        var cat1 = new Cat("大毛","黄色");
        console.log(cat1.species); // 动物
        console.dir(Cat);

在这里插入图片描述
  cat1实例对象与构造函数关系图如下
  在这里插入图片描述
任何一个prototype对象都有一个constructor属性,指向它的构造函数。
添加 Cat.prototype = new Animal();代码以后
Cat.prototype.constructor指向Animal。

 console.log(Cat.constructor==Animal.constructor); //true

这显然会导致继承链的紊乱(cat1明明是用构造函数Cat生成的)

   function Animal(){
            this.species = "动物";
        }
        function Cat(name,color){
            this.name = name;
            this.color = color;
        }
        Cat.prototype = new Animal();
        Cat.prototype.constructor=Cat;
        var cat1 = new Cat("大毛","黄色");
        console.log(cat1.constructor==Cat.prototype.constructor)//true
        console.dir(Cat);

在这里插入图片描述
cat1实例对象与构造函数关系图如下
在这里插入图片描述

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值