Javascript 继承模式

在面向对象的JavaScript开发中使用继承可以提高代码重用性,javascript有多重方式可以实现继承,考虑代码的可维护性在项目中应该保持代码风格的一致性,下面是JavaScript中继承的实现方式之一:

辅助对象:

var global = window;

(function(ns,undefined){
		  
	//辅助对象:
	var Class = {
		
		extends: function(SubClass, SuperClass){
			
			var F = function() {};
			F.prototype = SuperClass.prototype;
			SubClass.prototype = new F();
			SubClass.prototype.constructor = SubClass;
			
			SubClass.base = SuperClass.prototype;
			if(SuperClass.prototype.constructor == Object.prototype.constructor) {
				SuperClass.prototype.constructor = SuperClass;
			}
		  
		}
	}
	
	global.Class = Class;
}(global, undefined));

 继承模式:

function Person(name){
	this.name = name;
}

Person.prototype = {
	
	getName: function(){
		console.log("Person.prototype.getName")
	},
	
	say: function(){
		console.log("Person.prototype.say")
	}
};

function Employee(title, name){
	Employee.base.constructor.call(this, name);
	this.title = title;
}
Class.extends(Employee, Person);

//重写person.prototype.say
Employee.prototype.say = function(){
	Employee.base.say.call(this);//调用父类方法
	console.log("Employee.prototype.say");
};

Employee.prototype.getTitle = function(){
	console.log("Employee.prototype.getTitle")
};

 调用演示:

var e = new Employee("前端", "jser");
console.log(e.name)
console.log(e.title)
e.getName() 
e.getTitle()
e.say()

//运行结果:
//jser
//前端
//Person.prototype.getName
//Employee.prototype.getTitle
//Person.prototype.say
//Employee.prototype.say

 

posted @ 2013-01-09 16:24  rentj  阅读(...)  评论(... 编辑 收藏