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"

  

你可能感兴趣的:(面向对象)