当前位置: 代码迷 >> 综合 >> 寄生组合式继承
  详细解决方案

寄生组合式继承

热度:58   发布时间:2024-02-07 09:33:06.0

1、寄生组合式继承, 即通过借用构造函数来继承属性, 在原型上添加共用的方法, 通过寄生式实现继承

2、

			//寄生组合式继承, 即通过借用构造函数来继承属性, 在原型上添加共用的方法, 通过寄生式实现继承.// 上边的例子高效的体现了只调用了一次 SuperType 构造函数,并且因此也避免了在 SubType.prototype 上面创建不必要的 多余的属性.与此同时,原型链还能保持不变// function inheritPrototype(subType, superType) {// 	var prototype = Object.create(superType.prototype); // 创建对象,创建父类原型的一个副本// 	prototype.constructor = subType; // 增强对象,弥补因重写原型而失去的默认的constructor 属性// 	subType.prototype = prototype; // 指定对象,将新创建的对象赋值给子类的原型// }// 父类初始化实例属性和原型的属性和方法function SuperType(name) {this.name = name;this.colors = ["red", "blue", "green"];this.sheet = function(sheet) {console.log(this.name + '正在sheet!' + sheet);}}SuperType.prototype.sayName = function() {console.log(this.name);};// 借用构造函数继承构造函数的实例的属性(解决引用类型共享的问题)function SubType(name, age) {SuperType.call(this, name);this.age = age;}(function(SubType, SuperType) {var prototype = Object.create(SuperType.prototype) //创建父类原型的一个副本prototype.constructor = prototype // 增强对象,弥补因重写原型而失去的默认的constructor 属性SubType.prototype = prototype //指定对象,讲新创建的对象赋值给子类的原型}(SubType, SuperType))// 将子类型的原型重写替换成父类的原型// inheritPrototype(SubType, SuperType);// 对子类添加自己的方法SubType.prototype.sayAge = function() {console.log(this.age);};var instance1 = new SubType("heyushuo", 12);var instance2 = new SubType("kebi");console.log('instance1', instance1)console.log('instance2', instance2)instance1.sayName(); //heyushuoinstance1.sayAge(); //12instance2.sayName(); //kebiinstance1.colors.push("yellow"); // ["red", "blue", "green", "yellow"]instance1.colors.push("black"); // ["red", "blue", "green", "black"]

 

  相关解决方案