乐趣区

JavaScript面向对象 ~ 原型和继承(2)

原型链
什么是原型链
根据之前关于原型的知识(https://segmentfault.com/a/11…),渐渐引出了原型链的概念。凡是对象都有原型,而在 JavaScript 中,万物皆对象,所以,原型也是对象,也具有原型,也就是原型的原型,如此下去,会构成一个对象序列,该结构即为原型链。如前面提到,实例对象通过 proto 访问原型。
那么,原型链什么时候到头呢?默认的原型链结构又是怎样的呢?
凡是使用构造函数,并且没有利用赋值方法修改原型的对象,则保留默认的原型链,该原型链通过 proto 一直向上访问必须最终到头,返回值 null。注意,这里说的是原型的值为 null,需要与之前的属性查找原则所说的没有该属性返回的是 undefined 区分开来。
以一个简单的构造函数为例,演示默认的原型链结构:
function Person(){}
var p = new Person();

当前实例对象 -> Person.prototype -> Object.prototype -> nll
可以在 Google 浏览器调试工具中查看

什么是原型式继承
通过修改(增加、删除等)原型链结构,使得实例对象具有原型链上的所有方法

退出移动版