原型与原型链笔记

JavaScript 继承机制的设计思想就是,原型对象的所有属性和方法,都能被实例对象共享。

JavaScript 规定,每个函数都有一个prototype属性,指向一个对象。

function f() {}
typeof f.prototype // "object"
复制代码

函数f默认具有prototype属性,指向一个对象。

对于构造函数来说,生成实例的时候,该属性会自动成为实例对象的原型。

function Animal(name) {
  this.name = name;
}
Animal.prototype.color = 'white';

var cat1 = new Animal('大毛');
var cat2 = new Animal('二毛');

cat1.color // 'white'
cat2.color // 'white'
复制代码

构造函数Animalprototype属性,就是实例对象cat1cat2的原型对象。原型对象上添加一个color属性,结果,实例对象都共享了该属性。

所有对象都有自己的原型对象(prototype)。

当实例对象本身没有某个属性或方法的时候,它会到原型对象去寻找该属性或方法。如果直到最顶层的Object.prototype还是找不到,则返回undefined

如果实例对象自身就有某个属性或方法,它就不会再去原型对象寻找这个属性或方法。如果对象自身和它的原型,都定义了一个同名属性,那么优先读取对象自身的属性,这叫做“覆盖”(overriding)。

由于原型对象也是对象,所以它也有自己的原型。因此,就会形成一个“原型链”(prototype chain)。

如果一层层地上溯,所有对象的原型最终都可以上溯到Object.prototype,即Object构造函数的prototype属性。也就是说,所有对象都继承了Object.prototype的属性。这就是所有对象都有valueOftoString方法的原因。

Object.prototype的原型是null。原型链的尽头是null。

Object.getPrototypeOf(Object.prototype)
// null
复制代码

本文整理自阮一峰所作JavaScript教程之相关内容。

转载于:https://juejin.im/post/5c0e6e946fb9a04a0b220193

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值