参考书籍:JavaScript设计模式
类式继承
https://blog.csdn.net/weixin_44924173/article/details/90911544
原型式继承是借助原型prototype可以根据已有的对象创建新的对象,同时不必创建新的自定义对象类型。
//原型式
function inheritObject(o){
//声明一个过渡函数
function F(){};
//过渡函数的原型继承父类
F.prototype=o;
//返回过渡函数的实例
return new F();
}
上面的例子是对类式继承的一个封装,其实其中的过渡函数就相当于类式继承中的子类,不过在原型式中作为过渡对象出现,目的是为了创建要返回新的实例化对象。由于过渡类F中的构造函数为空,所以开销比较小。
类似类式继承,所以会遇到同样被修改引用属性的问题
//原型式
function inheritObject(o) {
//声明一个过渡函数
function F() { };
//过渡函数的原型继承父类
F.prototype = o;
//返回过渡函数的实例
return new F();
}
function displayBook() {
var book = {
name: "html",
alikeBook: ["css", "java"]
}
var newBook = inheritObject(book);
newBook.name = "ajax";
newBook.alikeBook.push("webpack");
var otherBook = inheritObject(book);
otherBook.name = "angular";
otherBook.alikeBook.push("react");
console.log(book.name);//html
console.log(book.alikeBook);//["css", "java", "webpack", "react"]
console.log(newBook.name);//ajax
console.log(newBook.alikeBook);//["css", "java", "webpack", "react"]
console.log(otherBook.name);//angular
console.log(otherBook.alikeBook);//["css", "java", "webpack", "react"]
}
为了解决引用属性被覆盖的风险,引如寄生式继承
https://blog.csdn.net/weixin_44924173/article/details/91046922