JavaScript原型式继承详解

79 1180

是什么

  • 提供了自定义的方法, 这个方法在创建的时候将其原型对象指定成自己想要的原型(浅复制)
  • 在es5中其实已经实现了这个函数[[原型对象, 模式#^f0cd6b|使用Object.create()方法]]

模板

function object(o) { // // o是指传入的父类

	function F() { } // 创建一个函数对象

	F.prototype = o; // 指定当前函数为原型对象, 该函数作为实际子类传回

	return new F();// new关键字调用F

}



function object(o) { // // o是指传入的父类

	function F() { } // 创建一个函数对象

	F.prototype = o; // 指定当前函数为原型对象, 该函数作为实际子类传回

	return new F();// new关键字调用F

}



let father = {

	name: "jerry",

	friends: ["tom"], // 引用类型会在所有子类共享

	sayName: function () {

		console.log(this.name);

	}

}



// 扩展父类

// son1

let son1 = object(father);

console.log(son1);// console.log(Object.getPrototypeOf(son1));

// son2

let son2 = object(father);

console.log(son2);

  • 因是字面量声明, 所以无法用.prototype该原型受保护, 但可以在实例上直接添加, 遮盖原型上的内容, 如son1.属性
  • 等同于es5 Object.create()

缺点

和原型模式一样, 引用类型仍然会在对象之间共享, 参考[[原型对象, 模式]]


Prev Post JavaScript组合继承
Next Post JavaScript寄生式继承