Base.js

Base.js部分代码还不理解,作个记号!

 

/*
Base.js
version 1.1
Copyright 2006-2010
License:...
*/
var Base = function(){

};

Base.extend = function(_instance,_static){//subclass
	var extend = Base.prototype.extend;

	//build thid prototype
	Base._prototyping = true;

	var proto = new this;

	extend.call(proto,_instance);

	proto.base = function(){
		//call this method from any other method to invoke that method's ancestor
	}
	delete Base._prototyping;
	
	//create the wrapper for the constructor function
	var constructor = proto.constructor;

	var klass = proto.constructor = function(){
		if(!Base._prototyping){
			if(this._constructing || this.constructor == klass){
				this._constructing = true;
				constructor.apply(this,arguments);
				delete this._constructing;
			}else if (arguments[0] != null){
				return (arguments[0].extend || extend).call(arguments[0],proto);
			}
		}
	};

	//build the clas interface 

	klass.ancestor = this;
	klass.extend = this.extend;
	klass.forEach = this.forEach;
	klass.implement = this.implement;
	klass.prototype = proto;
	klass.toString = this.toString;
	klass.valueOf = function(type){
		//return (type == "object")?klass:constructor;
		return (type == "object")?klass:constructor.valueOf();
	};
	extend.call(klass,_static);
	//class initialisation
	if(typeof klass.init == "function"){
		klass.init();
	}
	return klass;
};

Base.prototype = {
	extend:function(source,value){
		if(arguments.length>1){
			var ancestor = this[source];
			if(ancestor && (typeof value == "function") && (!ancestor.valueOf || ancestor.valueOf() != value.valueOf())
				&& /\bbase\b/.test(value)){
				var method = value.valueOf();
				value = function(){
					var previors = this.vase || Base.prototype.base;
					this.base = ancestor;
					var returnValue = method.apply(this,arguments);
					this.base = previous;
					return returnValue;
				};
				value.toString = Base.toString;
			}
			this[source] = value;
		}else if(source){//extending with an object literal
			var extend = Base.prototype.extend;
			if(!Base._prototyping && typeof this != "function"){
				extend = this.extend || extend;
			}
			var proto = {toSource:null};
			//do the "toString" and other methods manually
			var hidden = ["constructor","toString","valueOf"];
			// if we are prototyping then include the constructor
			var i = Base._prototyping ?0:1;
			whild(key = hidden[i++]){
				if(source[key] != proto[key]){
					extend.call(this,key,source[key]);
				}
			}

			for(var key in source){
				if(!proto[key]){
					extend.call(this,key,source[key]);
				}
			}
		}
		return this;
	}
};

//initialise
Base = Base.extend({
	constructor:function(){
		this.extend(arguments[0]);
	}
},{
	ancestor:Object,
	verson:"1.1",
	
	forEach:function(object,block,context){
		for(var key in object){
			if(this.prototype[key] === undefined){
				block.call(context,object[key],key,object);
			}
		}
	},
	implement:function(){
		for(var i=0;i<arguments.length;i++){
			if(typeof arguments[i] == "function"){
				//if it's a function,call it
				arguments[i](this.prototype);
			}else{
				//add the interface using the extend method
				this.prototype.extend(arguments[i]);
			}
		}
		return this;
	},
	toString:function(){
		return String(this.valueOf());
	}
});


使用:

var Person = Base.extend({
	constructor:function(name){
		this.name = name;
	},
	getName:function(){
		return this.name;
	}
});

var User = Person.extend({
	constructor:function(name,password){
		this.base(name);
		this.password = password;
	},
	getPassword:function(){
		return this.password;
	}
});



var user = new User("xuyi","12345");
alert(user.getName()+',   '+user.getPassword());


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值