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"