`

我也来重复造个轮子吧 ,发布一个利用原型,在Javascript中实现类机制的简单框架: GT-Class

阅读更多
我也来重复造个轮子吧 ,发布一个利用prototype(原型,不是指那个叫做prototype.js的框架),在Javascript中实现类机制的简单框架: GT-Class .

源码&示例: https://github.com/finscn/GT-Class 

=========================



这是一个利用prototype(原型,不是指那个叫做prototype.js的框架) ,在Javascript中实现类机制的简单框架.

虽然目前这类框架有很多, 但是在实际工作中,它们往往在功能/性能/易用性等方面并不能完全符合我的需求.

因此我结合了一些现有框架的特点 再加入一点点自己的原创的东西, 就有了这个框架.

当然 这个框架在并不能说是"集百家之长",它功能/性能/易用性等方面也不是最好,只能说它是一个"更符合我自己期望和使用习惯"的实现.

至于是否符合您的需求, 那就不敢保证了, 不过还是希望您可以提出宝贵的建议和意见, 谢谢了 .



=========================

简单示例:

1 创建类

//方式1 : 
var Foo = GT.Class.create( function(args){
			/* 构造函数 */
		 },
		 {
			classname : 'Foo', //类名,可选. 设置后,可通过 GT.Class.forName(classname) 得到类.
			//以下为类的成员
			att1 : 1 , 
			att2 : 2 ,
			method1 : function(){ },
			method2 : function(){ }
			
		 } );
		 
//方式2 : 
var Foo =function(args){
			/* 构造函数 */
		 }
Foo.prototype.att1=1;
Foo.prototype.method1=function(){ };

GT.Class.create( Foo,
		
		//注意:之前Foo.prototype里定义的成员,会被这里定义的"同名成员"覆盖.
		 {
			classname : 'Foo', //类名,可选,
			//以下为类的成员
			att2 : 2 ,
			method2 : function(){ }
			
		 } );


2 继承 :

var Bar = GT.Class.create( function(args){
			/* 构造函数 */
		 },
		 {
			classname : 'Bar', //类名,可选,
			//以下为类的成员
			att2 : 3 ,
			
			// 覆盖了父类里的同名方法 
			method1 : function(a){ 
				
				this.$super(a); //调用父类的同名方法
				
			}, 
			method3 : function(a3){ 
				
				Bar.$superclass.method2.apply(this, [a3]); //调用父类里的其他方法. 
				
				/* 此处要注意  
				 Bar.$superclass.method2.apply(this, [a3])
				 Bar.$superclass.method2(a3)
				 this.method2(a3) 
				 三者的异同
				*/
			}
			
		 }, 
		 Foo	//父类
		 );

//如果子类没什么要做的, 可以直接

var Bar = GT.Class.create( function(args){
			/* 构造函数 */
		 }, 
		 Foo	//父类
		 );
		 
// 以上为 直接创建一个"某父类的子类", 我们也可以先创建好两个类, 然后后期再指定继承关系.

// "子类"必须是通过 GT.Class.create创建的类
子类.$extend(父类);

// "父类"必须是通过 GT.Class.create创建的类
父类.$create(子类);




=================

更多详细的说明和用法 见  gt-class.js 和 gt-class-example.html 文件的源码.
源码中有较详细的注释和示例 ( 只有中文 ).
希望有朋友愿意能帮忙翻译成英文 

1
0
分享到:
评论
3 楼 shiren1118 2011-01-07  
个人觉得alzui的类极致实现的最好最优雅
alzui说明
http://wmingjian.iteye.com/blog/438202
演化过程
http://wmingjian.iteye.com/blog/438211

cicyui的也不错,优雅不足
http://cicyui.com/bbs/viewthread.php?tid=247&extra=page%3D1



ext和yui就不用说了
2 楼 shiren1118 2011-01-07  
/*类机制定义*/
window.Class = function(name, src) {
    src.constructor.prototype = src;
    window[name] = src.constructor;
};


/*自定义类*/
Class("Msg", {
    constructor: function(s) {
        alert(s);
    }
});

/*自定义类*/
Class("Stack", {
    constructor: function() {
        this.items = [];
    },
    add : function(item){
        this.items.push(item);

//栈中允许最大长度
        if(this.items.length > 100000){
            this.items.shift();
        }
    },
    remove : function(item){
        var s = [];

//移除item,然后遍历,把剩下发的赋值给items
        for(var i = 0, len = this.items.length; i < len; i++) {
            if(this.items[i] != item){
                s.push(this.items[i]);
            }
        }

        items = s;
    },
getCount : function(){
//返回栈的大小
        return this.items.length;
    },
    next : function(){
//出栈操作,返回最后入栈的值
        return this.items.pop();
    },
say: function(msg){
//测试栈的大小
        alert(msg+' --- Stack count:= '+this.items.length);
    }
});
1 楼 fins 2011-01-07  

文中示例有两个小错误
修正了

关于 "2 继承" 的部分

# classname : 'Bar', //类名,可选, 
#             method3 : function(a3){  
#                  
#                 Bar.$superclass.method2.apply(this, [a3]); //调用父类里的其他方法.  
#                  
#                 /* 此处要注意  
#                  Bar.$superclass.method2.apply(this, [a3])
#                  Bar.$superclass.method2(a3)
#                  this.method2(a3) 
#                  三者的异同
#                 */ 
#             } 

相关推荐

    幼儿托班语言教案::童话-一只大轮子(通用).doc

    幼儿托班语言教案::童话-一只大轮子(通用).doc

    重复造轮子,表单验证

    在IT行业中,"重复造轮子,表单验证"是一个常见的议题,特别是在软件开发中。当我们谈论表单验证时,通常是指在用户提交数据到服务器之前,在客户端(通常是Web浏览器)进行的数据验证过程。这个过程确保了用户输入...

    重复造轮子:从0开始实现Vue数据绑定 | Shellming's Note1

    在本文中,我们将深入探讨Vue.js框架中的数据绑定实现,这是现代前端开发中的一个重要概念。Vue.js通过利用JavaScript的`Object.defineProperty()`方法实现了数据绑定,使得数据的变更能够自动反映到视图上,同时也...

    Django是否存在重复制造轮子

    很多时候,都听人家在说不要重复制造轮子,要站在巨人的肩膀上等....不过让我感到有点困惑的是,怎么样才叫做不要重复制造轮子?如何才能站在巨人的肩旁上?现在网络如此发达,资源如此丰富,开源社区也发展的很好。...

    轮子哥安卓开发框架,非常好用

    项目中常见的代码进行了封装,或是封装到基类中、或是封装到工具类中、或者封装到框架中,不追求过度封装,根据实际场景和代码维护性考虑,尽量保证同一个功能的代码在项目中不重复。 对小屏手机、全面屏手机、带...

    JavaScript_天天造轮子手写面试常见源码.zip

    "天天造轮子手写面试常见源码.zip"这个压缩包显然包含了与JavaScript面试相关的代码实现,可能是对常见算法、设计模式或者JavaScript核心概念的实战示例。通过分析其中的"wheel-awesome_master.zip"和"说明.txt",...

    外文翻译:学用JavaScript设计模式

    jQuery作为一个非常流行的JavaScript库,其实现中也运用了许多设计模式。本书中提到了几种关键的设计模式: - **Composite Pattern(组合模式)**:将对象组合成树形结构以表示部分-整体层次结构。 - **适配器模式*...

    personVue一个模仿vue实现mvvm框架的简单轮子

    这个项目不仅为我们提供了一个学习Vue.js设计理念和机制的良好平台,还为开发者们提供了在实际应用中尝试和理解MVVM模式的机会。 MVVM(Model-View-ViewModel)是一种设计模式,它将数据模型、视图和视图模型紧密...

    一个开源通用的应用程序框架 (待参与)

    uPattern是一个模式实现单元,没有足够的时间也没有那么多精力去实现所有的模式,于是在这份源代码里,您发现您可以使用一个用户组来登录,本来这是不允许的啊,如果您想找到原因,原来uPattern中对于合成模式的实现...

    写一个框架的详细步骤.doc

    创建一个框架是一个复杂而有挑战性的任务,涉及到深入理解软件设计原则、编程语言特性和目标用户的实际需求。以下是一些关于构建一个框架的详细步骤,以创建一个Java平台上的轻量级、零配置、易用且高度可扩展的Web ...

    SSM框架学习资料-华迪公司出版

    - **提高开发效率**:通过使用预定义的框架结构,开发者可以避免重复造轮子,从而将更多的精力集中在业务逻辑的实现上。 - **确保代码质量**:框架通常遵循最佳实践,并经过社区的广泛测试,因此可以显著提高代码的...

    一个开源通用的应用程序框架2版 (待参与)

    uPattern是一个模式实现单元,没有足够的时间也没有那么多精力去实现所有的模式,于是在这份源代码里,您发现您可以使用一个用户组来登录,本来这是不允许的啊,如果您想找到原因,原来uPattern中对于合成模式的实现...

    JQuery验证框架

    下面是一个简单的示例,演示如何使用JQuery验证框架来验证一个包含姓名和邮箱的表单: ```html &lt;!DOCTYPE html&gt; &lt;html lang="zh-CN"&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;JQuery验证框架示例 ...

    swt table 自己造个轮子

    在这个场景中,“swt table 自己造个轮子”指的是使用SWT(Standard Widget Toolkit)库来创建一个自定义的表格组件。SWT是Eclipse项目的一部分,它提供了一套原生的GUI组件,用于Java应用程序,提供了与操作系统更...

    一个微服务框架

    - **自造轮子**:鉴于现有工具和技术的局限性,开发者可能会选择自行构建满足特定需求的服务框架。 #### 面临的挑战 - **技术选型**:选择合适的技术栈和工具并不容易,尤其是当现有的解决方案无法完全满足需求时。...

    【Unity造轮子】实现一个类csgo的武器轮盘功能源码

    # 【Unity造轮子】实现一个类csgo的武器轮盘功能 # 作者信息 姓名:向宇 博客:[https://xiangyu.blog.csdn.net/](https://xiangyu.blog.csdn.net/) # 文章说明: ...

    Pytorch框架CV开发-从入门到实战

    简洁:PyTorch的设计追求最少的封装,尽量避免重复造轮子。PyTorch的源码只有TensorFlow的十分之一左右,更少的抽象、更直观的设计使得PyTorch的源码十分易于阅读。 速度:PyTorch 的灵活性不以速度为代价,在许多...

    实现一个小型的Vuejs

    在实现一个小型的Vuejs项目中,我们可以深入理解其核心原理,包括数据响应式、虚拟DOM以及指令系统等关键概念。 1. **数据响应式**: 数据响应式是Vue.js的一个核心特性,它使得当数据变化时,视图能够自动更新。...

    Python-COBOL的微web框架

    在Web开发中,框架的作用是提供一个结构化的环境,让开发者能够专注于编写应用的核心功能,而不是重复造轮子。Python-COBOL框架可能会提供以下核心组件: 1. **路由系统**:Python中负责映射URL到特定的COBOL处理...

Global site tag (gtag.js) - Google Analytics