JavaScript模块化开发框架ArchtJS(实现类、继承、包依赖管理)

  1 //声明包信息
  2 //声明中的目录都是以当前js文件为起点的相对路径(类似css文件中引用图片链接)
  3 Archt.package({
  4     //常用工具类
  5     ‘utils‘: [‘lib/utils.js‘],
  6     //jquery核心
  7     ‘lib.jquery.core‘: [‘lib/jquery/jquery-1.10.2.js‘],
  8     //jqueryUI
  9     ‘lib.jquery.ui‘: [‘lib/jquery/jquery-ui-1.11.4.js‘],
 10     //jquery滚动条插件
 11     ‘lib.jquery.plugins.mcustomscrollbar‘: {
 12         base: ‘lib/jquery/plugins/mcustomscrollbar/‘,
 13         paths: [‘jquery.mCustomScrollbar.css‘,
 14                 ‘jquery.mousewheel.min.js‘,
 15                 ‘jquery.mCustomScrollbar.js‘]
 16     },
 17     //jquery树插件
 18     ‘lib.jquery.plugins.ztree‘: {
 19         base: ‘lib/jquery/plugins/ztree/‘,
 20         paths: [‘css/vaStyle/vaStyle.css‘, ‘jquery.ztree.all-3.5.min.js‘]
 21     },
 22     //百度上传插件
 23     ‘lib.baidu.webuploader‘: {
 24         base: ‘lib/baidu.webuploader/‘,
 25         paths: [‘webuploader.css‘, ‘webuploader.js‘]
 26     },
 27     //百度富文本编辑器
 28     ‘lib.baidu.ueditor‘: {
 29         base: ‘lib/baidu.ueditor/‘,
 30         paths: [‘‘]
 31     },
 32     //字体库
 33     ‘lib.fontawesome‘: {
 34         base: ‘lib/font-awesome/‘,
 35         paths: [‘css/font-awesome.min.css‘]
 36     },
 37     //右键菜单
 38     ‘lib.contextmenu‘: {
 39         base: ‘lib/contextmenu/‘,
 40         paths: [‘context-menu.js‘, ‘context-menu.css‘]
 41     }
 42 });
 43 //---------------------------------------------------------------
 44 //类所在的包
 45 Archt.package(‘system.visual‘);
 46 //类依赖的包(相同包下的类不需要引入依赖)
 47 Archt.import([
 48     ‘lib.jquery.core‘,
 49     ‘lib.jquery.ui‘,
 50     ‘lib.jquery.plugins.mcustomscrollbar‘,
 51     ‘lib.fontawesome‘,
 52     ‘utils‘
 53 ]);
 54
 55 //如果未指定类所在的包则为上一个定义类所在的包,依赖同理。
 56 //定义类
 57 define(‘Base‘, {
 58     //共有属性
 59     name:‘base‘,
 60     //私有属性(_前缀)
 61     _name:‘‘,
 62     //静态
 63     __static:{
 64     },
 65     //初始化函数
 66     __init:function(params){
 67         //私有属性
 68         this.myprivate = ‘‘;
 69         //私有方法
 70         this.func = function(){};
 71     },
 72     //共有方法
 73     public:function(){
 74     },
 75     //私有方法(_前缀)
 76     _private:function(){
 77     },
 78     showTime:function(){
 79     }
 80 });
 81
 82 //继承
 83 define(‘Test‘, ‘Base‘, {
 84     __init:function(params){
 85         //使用静态类
 86         var main = this.__using(‘Main‘);
 87     },
 88     showTime:function(){
 89         //调用父类方法。因为有多继承,所以调用方法时需要指定父类
 90         this.__super.showTime[‘Base‘].call(this);
 91     },
 92     //根据包路径管理资源文件
 93     getImgPath:function(){
 94         //获取类所在包的路径
 95         return this.__packageUrl + ‘/image/logo.png‘;
 96     }
 97 });
 98
 99 //定义静态类
100 define(‘Main‘, function(exports, magic){
101     // 通过 exports 对外提供接口
102     exports.doSomething = ...
103     //magic包含此类的基本信息和系统方法,例如类名、所在包、依赖包等
104
105     //创建类
106     var params = {};
107     var test = magic.create(‘Test‘, params);
108     test.public();
109 });
110
111 //启动入口
112 //静态类作为启动
113 runMain(‘system.visual.Main‘);
114 //普通类作为启动
115 runMain(‘system.visual.Test‘, params, callback);
116
117
118 //小项目不使用包依赖,可以去掉上面的包相关代码,但是需要手写加载js文件,js顺序无影响
  1. 每个类的定义都可在单独的文件,加载顺序无影响
  2. 如果未定义包和依赖,所有的类都在默认包package下
  3. 静态类的函数只会运行一次,之后获取到的只是静态类的exports
  4. 类内部的__create、__using方法只能创建类依赖的类
  5. Archt.create(类名/完整类名, 参数, 依赖包数组)、Archt.using(类名/完整类名, 依赖包数组)

框架已完成,未测试,未发布过,这里只做记录,看看是否有人感兴趣

时间: 2024-12-25 11:57:21

JavaScript模块化开发框架ArchtJS(实现类、继承、包依赖管理)的相关文章

Golang Gin 项目包依赖管理 godep 使用

Golang Gin 项目包依赖管理 godep 使用 标签(空格分隔): Go 在按照github.com/tools/godep文档go get完包以后,调整项目结构为$GOPATH/src/$PROJECT_NAME/,同时使项目编译没有问题.执行godep save命令,出现了一系列包缺失的问题: github.com/campoy/embedmd github.com/client9/misspell/cmd/misspell github.com/dustin/go-broadcas

使用CocoaPods来做iOS程序的包依赖管理

前言 每种语言发展到一个阶段,就会出现相应的依赖管理工具, 或者是中央代码仓库.比如 Java: maven,Ivy Ruby: gems Python: pip, easy_install Nodejs: npm 随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,这个工具叫:CocoaPods. CocoaPods简介 CocoaPods是一个负责管理iOS项目中第三方开源代码的工具.CocoaPods项目的源码在Github上管理.该项目开始于2011年8月12日,经过一年

javascript组件开发之基类继承实现

上一篇文章大概的介绍了一下关于javascript组件的开发方式,这篇文章主要详细记一下基类的编写,这个基类主要是实现继承的功能 为什么要封装基类? 由于这次重构项目需要对各种组件进行封装,并且这些组件的实现方式都差不多,为了便于管理,让代码尽量统一,所以到对组件封装一个base基类(javascript没有类的概念,暂且这样叫吧),关于javascript的oo实现:可以参考这篇文章javascript oo实现:写得很赞,膜拜,我改写的这个基于John Resig的实现方式. 基类的封装方式

javascript类继承

function extend(subClass, superClass) { var f = function() {}; f.prototype = superClass.prototype; subClass.prototype = new f(); subClass.superClass = superClass.prototype; } var parent = function (name, age) { this._name = name; this._age = age; };

javascript类继承的一些实验

其实一开始编js没怎么用过对象,一般都用func,func,func···但是用多了,感觉代码一点都不美观,还要这里包一个函数,那里包一个函数,或者一直都是函数调用,不好看,而且一些重用的都要重写的话就很麻烦(不好意思,对于我这种新手,开始还是一般用func比较高效率···).所以就决定开始要用object来编程才能更省事,下面就是我看了一些博客文章关于类的见解,有什么不对的希望各位可以多多给些指点: 对于类的编程,声明的方法有如下几种:1.var test = function(){};2.f

JavaScript模拟Java类继承

javascript采用原型继承的方式继承一个类(javascript没有类这个概念,暂时这么称呼吧),但一些使用过Java的程序员可能习惯使用经典的类继承,但javascript原生并不支持这种方式,因此需要手动实现.这里通过定义一个定义类(defineClass)的函数实现,经测试越用越顺手.由于javascript没有访问修饰符,因此如果需要使用到private成员,请使用闭包. 1 /* 简单的对象扩充方法 2 */ 3 merge:function (target, origin) {

Javascript:原型模式类继承

原型模式 每个函数(准确说不是类.对象)都有一个prototype属性,这个属性是一个指针,指向一个对象. 使用原型对象的好处是可以让所有对象实例共享它包含的属性和方法. 1.原型对象 (1)当创建一个新函数,就会为该函数创建一个prototype属性,这个属性指向函数的原型对象. (2)默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向 prototype属性所在函数  的指针. (3)实例的内部包含一个指针,叫[[Prototype]].不过

【JavaScript】类继承(对象冒充)和原型继承__深入理解原型和原型链

JavaScript里的继承方式在很多书上分了很多类型和实现方式,大体上就是两种:类继承(对象冒充)和原型继承. 类继承(对象冒充):在函数内部定义自身的属性的方法,子类继承时,用call或apply实现对象冒充,把类型定义的东西都复制过来,这样的继承子类与父类并没有多少关联,不互相影响,有利于保护自身的一些私有属性. 原型继承:每个函数都有自己的原型(prototype)属性,这个属性是在生成实例对象时自动创建的.它本身又是一个对象,拥有能够在实例间共享的属性和方法.而实例本身的属性和方法,则

JavaScript类继承实现之一

网上各博客论坛出现了很多JavaScript的类继承方法,浏览了一些,不是没注释,就是没有运行效果,于是自己写了个简洁易懂的版本,附带测试代码在最下面. 刚不小心删除了该文章,因此重新补上,另外加强了示例. (function() { Function.prototype.extend = function(baseClass) { // this is a function object. var oldPrototype = this.prototype, newPrototype = {}