js的继承工具函数

来自于这里,http://javascript.crockford.com/inheritance.html

这个可以为javascript继承提供很大的方便

目前还不知道有没有什么弊端

 

Function.prototype.method=function(name,fun){
			 this.prototype[name]=fun;
			 return this;
		 }
		 Function.method('inherits', function (parent) {
			    var d = {}, p = (this.prototype = new parent());
			    //这个方法可以用来调用被覆盖的父类方法
			    this.method('uber', function uber(name) {
			        if (!(name in d)) {
			            d[name] = 0;
			        }        
			        var f;//要执行的函数
			        var r;//函数的返回值
			        var t = d[name], v = parent.prototype;
			        if (t) {
			            while (t) {
			                v = v.constructor.prototype;
			                t -= 1;
			            }
			            f = v[name];
			        } else {
			            f = p[name];
			            if (f == this[name]) {
			                f = v[name];
			            }
			        }
			        d[name] += 1;
			        r = f.apply(this, Array.prototype.slice.apply(arguments,[1]));
			        d[name] -= 1;
			        return r;
			    });
			    return this;
			});
		 function Person(name){
			 this.name=name;
		 }
		 //给Person添加getName
		 Person.method("getName", function(o){
			return this.name;
		 });
		 function User(name,password){
			 this.name=name;
			 this.password=password;
		 };
		 //User继承Person
		 User.inherits(Person);
		 User.method("getPassword",function(){
			 alert(this.password);
		 });
		 //重写getName方法
		 User.method("getName",function(o){
			 //this.uber("getName")调用原始的getName方法,如果原始方法带参数则为this.uber("method",arg1,arg2,argN)
			 alert("My Name is "+this.uber("getName"));
		 });
		 var u=new User("张三",111111);
		 u.getPassword();
		 u.getName();

 如果有什么不对的 欢迎指出,

你可能感兴趣的:(JavaScript,继承,工具函数)