js原型链

本文详细解释了JavaScript中的原型链机制,包括对象和函数的原型、__proto__和prototype属性,以及如何修改原型属性如Dog类的实例。特别强调修改原型属性时需同步修改constructor属性的重要性。
摘要由CSDN通过智能技术生成

1. 原型链的内存结构图

  1. 每个 对象 都有一个 __proto__ 属性,代表其原型对象(IE不支持)

  2. 每个 函数对象 都有一个 prototype属性,代表其创建对象的原型

  3. 每个 原型对象 都有一个 constructor 属性,代表其创建函数

  4. 每个对象都有一个原型,同时每个对象又可以是其他对象的原型;

  5. 每个对象都有一个构造函数,每个对象都是由构造函数创建的。

 

  1. 注:

    1. Object() 函数的原型属性是顶级原型,顶级原型的原型对象是 null

    2. 所有的函数原型对象都是以顶级原型为原型对象的;

    3. 所有函数对象都是由 Function() 函数创建的,因此,函数对象的原型对象是 Function 原型

2. 修改原型属性

<script>
  function Pet(name, love, health){
    this.name = name || '无名';
    this.love = love || 60;
    this.health = health || 60;
    this.showBaseInfo = function(){
      console.log('姓名:' + this.name);
      console.log('亲密度:' + this.love);
      console.log('健康值:' + this.health);
    };
  }

  function Dog(){  }
  // 修改 Dog 的原型属性
  Dog.prototype = new Pet();
  // 同时,必须修改原型对象的 constructor 属性
  Dog.prototype.constructor = Dog;

  // 创建 Dog 对象
  var dog = new Dog();
  dog.name = '小黄';
  dog.health = 100;
  dog.showBaseInfo();
</script>

注: 修改函数原型属性的同时一定要修改原型属性的 constructor 属性,让它指向函数本身,JS 不会自动修改。 如下图所示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值