js面向对象-继承

定义父类

// 原型模式与构造函数组合
function Person(name,age,job) {
	// 构造函数模式定义实例属性
	this.name = name;
	this.age = age;
	this.job = job;
}

Person.prototype = {
	//原型模式定义方法和共享属性
	constructor: Person,  //重写原型改变了constructor,修正回来
	sayName:function() {
		alert(this.name);
	},
	sayJob:function() {
		alert(this.job);
	}
}

  定义子类

// 定义Singer类,并指定job为singer
function Singer(name,age,song) {
	Person.call(this,name,age,'singer');
	this.song = song;
}

  每次调用Singer构造函数都会把Singer的job设置为singer,并增加了一个属性song。

Singer继承Person

Singer.prototype = new Person();
Singer.prototype.constructor = Singer;
Singer.prototype.saySong = function() {
	alert(this.song);
}

  第一步把Singer的原型设置为Person的实例对象,第二步修正constructor指向,因为Singer的prototype等于Person,所以它的constructor指向的Person函数,第三步添加了一个Singer对象的方法。

创建Singer对象

var TaylorSwift = new Singer('Taylor Swift',22,'Love Story');
TaylorSwift.saySong();  //"Love Story"
TaylorSwift.sayJob();  //"singer"

  

原文地址:https://www.cnblogs.com/yoomin/p/3932995.html