梳理一下 JavaScript 中的继承
梳理 JavaScript 中的继承问题,则不得不先理解 Js 中的原型链,因为 ECMAScript 主要是基于原型链实现继承的。 原型链 在 Js 中,每个函数都有一个 prototype 属性,其指向该函数的原型对象。而函数的原型对象中,有一个 constructor 属性,指回向该函数。当函数被当作构造函数,使用 new 运算符生成实例时,在生成的实例对象中有一个内部属性 __proto__ 属性,该属性也指向函数的原型对象。在原型对象上有 __proto__ 指向原型对象的原型对象,依次传递,直到指向 Object.prototype 对象为止,即构成了原型链。如下图所示: 原型链继承 function Animal(name) { this.name = name; this.colors = ['black', 'red', 'pink']; } Animal.prototype.run = function (){ console.log('running'); } function Cat(age) { this.age = age; } Cat.prototype = new Animal('cat'); // 实现原型链继承 var cat1 = new Cat(1); console.log(cat1); // Cat { // age: 1, // _