Javascript中的原型链是什么?它的作用是什么?

原型链是 JavaScript 中实现继承的一种机制。每个对象都有一个私有属性 __proto__ 指向它的构造函数的原型对象 prototype。而那个原型对象的__proto__又指向它的构造函数的原型对象。这样一层层往上直到 Object 的原型对象 null。
这个链条就构成了原型链。

例如:

function Foo() { ... }

var f = new Foo();

f.__proto__ === Foo.prototype; // true
Foo.prototype.__proto__ === Object.prototype; // true
Object.prototype.__proto__ === null; // true 

这里 f 的原型链如下:

f ---> Foo.prototype ---> Object.prototype ---> null

原型链的作用主要有:

  1. 继承:子类可以继承父类的属性和方法。
function Parent() { ... }
Parent.prototype.method = function() { ... }

function Child() { ... }
Child.prototype = new Parent();

var c = new Child();
c.method(); // 继承自 Parent 
  1. 节省内存:多个实例对象可以共享它的原型对象所包含的属性和方法。
  2. 动态添加属性:即使实例对象已经创建,也可以为其原型添加属性和方法,并被所有实例对象共享。
function Foo() { ... }
var f = new Foo();

// 添加方法
Foo.prototype.method = function() { ... }

f.method(); // 可以调用 

所以,总结来说原型链有以下主要作用:

  1. 实现继承:让子类可以访问父类属性和方法
  2. 节省内存:多个实例共享原型对象的属性和方法
  3. 动态添加属性:可以为已有实例添加属性和方法