JS解惑--原型与原型链

首先,我们需要明确一些概念


  • JavaScript 中,一切都可视为对象,但对象也是有区别的。分为普通对象和函数对象,Object ,Function 是JS自带的函数对象。
  • 原型对象: 在JavaScript 中,每当定义一个对象(函数)时候,对象中都会包含一些预定义的属性。其中函数对象的一个属性就是原型对象 prototype。
  • 注:普通对象没有prototype,但有proto属性。
  • JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做proto的内置属性,用于指向创建它的函数对象的原型对象prototype。
  • 原型链: JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做proto的内置属性,用于指向创建它的函数对象的原型对象prototype。

有了上面概念的基础,接下来我们由代码对概念加以理解

<script type="text/javascript">
      function Person(){

      }
      Person.prototype.name = "Nicholas";
      Person.prototype.age = 29;
      Person.prototype.job = "Software Enginner";
        Person.prototype.sayName = function(){
            alert(this.name);
        };

        var person1 = new Person();
        person1.sayName();

        var person2 = new Person();
        person2.sayName();

        alert(person1.sayName == person2.sayName);
  </script>

这里写图片描述

由上图,我们可以得出:对于对象的构造函数来说,它有一个prototype属性指向原型对象,原型对象有一个constructor属性指向构造函数;对原型对象我们可以任意添加属性和方法;对于对象的实例而言它有一个proto的内部属性它指向原型对象,从而原型对象的属性和方法都被实例对象所继承。


注:当我们为实例添加属性值的时候,实际上如果我们添加的属性与原型对象的属性相同时,我们添加的那个属性会屏蔽原型对象中的属性;如果我们为实例添加的属性与原型对象不相同,它只会给实例添加属性对应的值,


这里写图片描述

当我们需要查找属性或者方法时候,js解析器会先到实例中去找,如果有的话就返回实例中属性或者方法;如果没有就继续往沿着原型链往原型对象中找,找到就返回,如果再没找到就继续沿着原型链往上搜索,直到Object对象的原型。如下图

这里写图片描述


看了以上文章,相信大家对原型与原型链有了进一步的了解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值