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();

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值