文享日志

框架设计模式代码示例

JavaScript

发表于2017年10月20日13:21:49

0条评论 164次阅读

//类构造器
//parent参数是继承的构造函数
var _class = function(parent){
	//构造函数,传入参数时,调用原型上的init函数处理
	var klass = function(){
		this.init.call(this,arguments);
	};

	if (parent) {
		//这里默认不继承类的属性
		var subclass = function(){}
		subclass.prototype = parent.prototype;
		klass.prototype = new subclass;
	}

	klass.prototype.init = function(){}

	//构造函数属性扩展
	klass.extend= function(obj){
		for(key in obj){
			klass[key] = obj[key];
		}
	}

	//创建别名
	klass.fn = klass.prototype ;
	klass.fn.parent = klass ;

	//找到klass继承的类的原型
	klass._super = klass.__proto__;

	//构造函数原型属性扩展
	klass.include = function(obj){
	    for(key in obj){
			klass.fn[key] = obj[key];
		}	
	}
	return klass;
}

//测试扩展类原型函数用例
function msg(obj){
	return '这是原型测试';
}

//创建一个类
//返回klass函数,new可有可无,这里写上,可能是说明作用的吧
//这里可以任意调用在_class中为构造函数扩展的属性,原型上的对象
var test = new _class;

//构造函数添加_name属性
test.extend({_name:function(obj){return obj}});
//构造函数原型上添加init属性
test.include({init:msg});

//测试添加成功没有
console.log(test._name);
console.log(test.prototype.init);


var test2 = new test();

//调用我们挂载到构造函数及其原型上的各种方法示例
console.log(test2.init());
console.log(test._name.call(this,test2));


//继承用法实例
var anmial = new _class;
anmial.include({
	_say : function(){
		return 'breath';
	}
})

var Cat = new _class(anmial);
var tony = new Cat();
console.log(tony._say());

//模拟JavaScript数组实现(只模拟了两个函数)
var _Array = new _class;
_Array.include({
	_forEach : [].forEach,
	_slice : [].slice
})
var ary_test = new _Array;
console.log(ary_test._slice.call([1,2,3,4],1,3)); 

原生调用(new Array).slice.call([1,2,3,4],1,3);  


👍 0  👎 0
共有0条评论

发表新评论

提交

广告展示

腾讯云推广 阿里云推广