JET(Javascript Extension Tools - Javascript 扩展工具包)
JET(Javascript Extension Tools - Javascript 扩展工具包)
站在巨人的肩上 Standing on shoulders of giants
JET 适用于 Web Page 和 Web App 的开发
据说是腾讯内部开发的!
JET 下载地址:http://code.google.com/p/j-et/downloads/list
特性
- 微内核设计
- 内核可完全分离出来,用于构建自己的框架
- 自由拼装各个模块
- 命名空间、原生对象零污染
- 无缝集成各种js框架
- 与jQuery, YUI, Mootools, Prototype.js 等框架无缝集成
- 与多种局部框架无缝集成,如:Mini, Sizzle, cssQuery, xpath, JSON 等等
- 多版本共存
- 如采用的JET版本过旧,旧有的Javascript代码不能与新版本JET兼容,则可以采用多版本共存的方式保持程序的可延续性
- 分层设计
- Javascript核心层,与Javascript解释引擎无关的封装和扩展
- 浏览器端Javascript层,对浏览器中的Javascript引擎部分的封装和扩展
代码示范
- JET 代码组织方式一(传统):
var J = new Jet(); J.out(J.version);
- JET 代码组织方式二(推荐):
Jet().$package(function(J){J.out(J.version); });
JET设计理念
不要重复自己(Don’t Repeat Yourself)
//=================================================================
感谢 David Flanagan, John Resig, 以及 MooTools, YUI, Prototype, Dojo, ExtJs 的作者们!
//=================================================================
JET 下载:http://code.google.com/p/j-et/downloads/list
JET
JET 简介
命名含义
设计理念
其他
发展规划
结构图
|
腾讯内部使用的js库也开源了— JET(Javascript Extension Tools – Javascript 扩展工具包),很难得的一件事情,赶紧下了Jet 1.1.1版本的整个源码,包括说明文档来看看源码,看看腾讯强大的前端技术的后面会有一个怎样的js库来支撑的。http://code.google.com/p/j-et/wiki/JET
查看了Jet的使用方式之后,首先不禁冒出了一个词“复制”。是的,Jet复制了YUI3的编写方式,提供了“包”的概念package:
//code here...
};
采用的也是颗粒化的方式,将负责不同功能的代码整理到独立的js文件里,比如:DOM、string、Event、http、fx、ui等等,不过Jet方法里并不能像YUI3那样直接导入该包的js文件,查看它的DEMO,需要自由组合几个js文件来实现想要的功能,做到了无缝的插入包,这个就得益于Jet中的微内核—jet.core.js。
上面是第一个“复制”,在查看jet.base.js这个文件源码的时候,看到了很多熟悉的函数呀:$try、clone、timedChunk、bind、random等等,这些都还是似乎直接复制。这个base文件包含了微内核、dom、browser、event、date、Class(用于继承和扩展的相关方法和属性)。但是,感觉看Jet的源码很爽,读起来很顺畅,整体来看Jet的各个文件的组织是:微内核来提供包以及仿照YUI3的这种操作方式,而其他的dom、event、browser等则是作为工具代码包的概念组织起来的。这就更像是一种函数功能集合,在各个包里对提供的各种接口API,也是过程函数的编写方式,增加、删除、修改都非常的容易,颗粒化的程度较高,这点非常赞~。核心逻辑简单了,代码组合的方式也就简单的多了。
Jet中Class的继承方式还是比较简单的,并且只提供原型的继承,对于父类中的使用this声明的方法和属性则不继承。这点不知道开发人员是怎么考虑的。
还有一个非常赞的地方,是event包中addEventListener、removeEventListener在IE下的处理方式。在IE下使用一个包装函数来对事件event对象做属性扩展,来使得跟W3C的事件的属性接口达成统一。同时通过一个事件储存容器,来储存每一个事件,在window设置了unload的情况下,删除全部已注册的事件。onDomReady原理跟我之前所写的类似,通过定时器来检测document、document.body、document.getElementById、document.getElementsByTagName是否可用来实现。
在代码的编写方式上也有值得借鉴的地方:在包的开头将全部的功能函数用变量声明了,之后实现每一个功能函数,最后把功能函数注册到包的命名空间下面。这样组织代码,看起来比较清晰,对实现代码的颗粒化也是有很大帮助。
不过在代码的细节上,还是有很多可以优化的地方:包括减少属性查询、执行语句,字符串的处理,以及在一些功能的实现上等等也都可以使用比较优雅的方式来实现的。但整体上来说是:简洁、代码组织有序、在兼容性方面做的也不错……
JET(Javascript Extension Tools - Javascript 扩展工具包)相关推荐
- Javascript .map文件-JavaScript源地图
本文翻译自:Javascript .map files - javascript source maps Recently I have seen files with .js.map extensi ...
- JavaScript学习13 JavaScript中的继承
JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript">//继承第一种方式: ...
- JavaScript 逆向 ( 一 ) --- JavaScript 语法基础
js 逆向:https://www.cnblogs.com/wuxianyu/category/1940304.html js逆向2:https://www.cnblogs.com/wuxianyu/ ...
- javascript小技巧 JavaScript[对象.属性]集锦 [zz]
因为这两篇太安逸了,东西很多,很实用,所以转到我格子里! 总的来说,如果你要找js 的东西,而不看这两篇的话,肯定要多花好多时间!!哈哈!! 如果你找的javascript的东西的话,建议你 ctrl ...
- 视频教程-Javascript DOM操作-JavaScript
Javascript DOM操作 江湖花名King... 何山 ¥39.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠,最少立减5元 ↓↓↓ ...
- JavaScript简介及JavaScript中的关键保留字、变量和数据类型
1. JavaScript简介 JavaScript 诞生于 1995 年.它当时的目的是为了进行表单输入的验证.因为在 JavaScript 问世之前,表单的验证都是通过服务器端验证的.而当时都是电 ...
- javaScript系列 [05]-javaScript和JSON
本文输出和JSON有关的以下内容 JSON和javaScript JSON的语法介绍 JSON的数据类型 JSON和XMLHTTPRequest JSON的序列化和反序列化处理 1.1 JSON和ja ...
- JavaScript 入门教程||javascript 简介||JavaScript 用法
javascript 简介 JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备. JavaScrip ...
- JavaScript基础第01天笔记——编程语言、计算机基础、JavaScript注释、JavaScript输入输出语句、变量的概念、变量的使用、数据类型、解释型语言和编译型语言、关键字和保留字
1 - 编程语言 1.1 编程 编程: 就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 计算机程序: 就是计算机所执行的一系列的指令集合,而程序全部都是用我们所掌 ...
最新文章
- java怎么不增加临时变量交换值
- 计算机主机内部结构连接,电脑主机内部结构介绍
- (转载)控制反转(IoC)与依赖注入(DI)
- trunk vlan 加路由
- Eclipse-properties文件乱码问题
- algorithm与numeric的一些常用函数
- 关于JSON的那些事儿
- react router 4
- 机器学习课程笔记【三】广义线性模型(2)-构建广义线性模型
- java类加载器用途_对于java类加载器的认识(2)
- Springboot后台管理系统
- 调用webservice服务方式总结
- 【人脸识别】arcface-pytorch代码解析
- Localization-Aware Active Learning for Object Detection (ACCV)
- 其实嵌入式编程还是很难很复杂的
- 带有当前位置坐标的地图
- React云音悦WebApp
- 使用 Vuex + Vue.js 构建单页应用
- 猜数游戏(详细讲解)
- 复变函数与积分变换习题收藏系列(一)——复数的性质与运算