寄生组合式继承

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(); //heyushuo
			instance1.sayAge(); //12
			instance2.sayName(); //kebi

			instance1.colors.push("yellow"); // ["red", "blue", "green", "yellow"]
			instance1.colors.push("black"); // ["red", "blue", "green", "black"]

 

你可能感兴趣的:(es6,js)