小议JavaScript泛式框架架构的逻辑形式
作者:leecade 来源:51js 发布时间:2010-07-02 12:55:00
by leecade :
我聊下我的想法
从功能上看,能不能把JS分成3层结构
1 语法设计,选择器,常用函数
2 业务逻辑(比如封装好常用的TAB啊 BUTTON啊 这些控件和抽象的功能类)
3 注册方法绑定事件等
------------------------------------
第一层结构
核心是设计语法,简写选择器,扩展常用函数;命名空间采用$
语法形式的设计,表达最简单的逻辑:
---------------------------
谁.要做什么(怎么做)
---------------------------
参考JQ 的API设计
$(who).what(how)
---------------------------
a.关于who
如果who是string的形式 则用选择器(推荐MINI选择器,简单缩写就行了,条件判断等还是应该在函数内处理)获取对象
如果who是 对象的形式,则是包装此对象以应用内建常用函数的方法链
如果who = "Ready" 则是应用 DOM Ready 方法
b.关于what
同样是参考JQ的语法实现链式写法
例: $("id").blind("click",function(){...}).show()
c.关于how
常用函数的自定义参数,没什么好说的
第二层结构
语义上不是描述方法而是描述对象,命名空间自定义 比如 Mail
API 上 我觉得使用NEW关键字还更清晰
比如 var btn = new Mail.Button
by Ozone:
站在系统论的高度并不准确的通俗宏观:
浏览器环境中的JS编程由JS自身、DOM数据输入、DOM数据输出组成,前者是主体,后两者是辅助,数据从DOM中来——经过JS处理——到DOM中出,JS数据处理的实质是计算,不外乎数值运算和逻辑运算,框架首要考虑的问题应该是JS主体抽象问题,其次才是输入输出简化。
框架应该尽量方便使用者思维“WHAT TO DO”,不被“HOW TO DO”所纠缠,把“HOW TO DO”与“WHAT TO DO”分开,从而回归“计算(运算)”这一语言的本质。
例如:
//-------- how to do ? -------------
Array.prototype.each = function(closure){
return this.length ? [closure(this[0])].concat(this.slice(1).each(closure)) : [];
}
function map(symbol, list){
return list.each(Function("x", "return x" + symbol))
}
//----------what to do ?-----------
var list = [1, 2, 3, 4, 5];
alert(map("+1", list)); // [2, 3, 4, 5, 6]
alert(map("-1", list)); // [0, 1, 2, 3, 4]
alert(map("*2", list)); // [2, 4, 6, 8,10]
alert(map("&1", list)); // [1, 0, 1, 0, 1]
alert(map("^1", list)); // [0, 3, 2, 5, 4]
alert(map("=1", list)); // [1, 1, 1, 1, 1]
alert(map(">>1", list));// [0, 1, 1, 2, 2]
alert(map(">1", list)); // [false,true,true,true,true]
alert(list); // [1, 2, 3, 4, 5]
现在不少学习书籍,开始就来个“hollo world ”,然后是没完没了的繁复的“HOW TO DO”实例,没有宏观的明细的语言体系把握,学人(特别是初学者)看得一个头两个大,晕头转向实属正常,不晕才怪!


猜你喜欢
- 掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费。1、使用局部变量尽量使用局部变量代替全局变量:便于维护,提高性能并
- 1 PromisePromise有一个缺点是一旦创建无法取消,所以本质上Promise是无法被终止的.但是我们可以通过中断调用链或中断Pro
- TensorFlow官网给的cifar-10教程,是卷积神经网络入门的好例子,有时想直接拿这个模型来跑自己的数据,却发现他的数据类型不是常见
- TIMESTAMP类型返回日期时间数据中带有 T场景描述MySQL 中使用 TIMESTAMP 类型实体类使用 java.util.Date
- 在这个教材中,我们假定你已经安装了Scrapy。假如你没有安装,你可以参考这个安装指南。我们将会用开放目录项目(dmoz)作为我
- 一、相关代码数据库配置类 MongoDBConn.py#encoding=utf-8'''Mongo Conn连接类
- 前言数据来源:population_data.json,先看一下数据长啥样[ { "Coun
- python的应用实践zipkin,需要py_zipkin,使用pip进行安装py_zipkin的时候出现问题, 根据stackoverfl
- 手写数字识别(小白入门)今早刚刚上了节实验课,关于逻辑回归,所以手有点刺挠就想发个博客,作为刚刚入门的小白,看到代码运行成功就有点小激动,这
- PHP PDO 事务与自动提交现在通过 PDO 连接上了,在开始进行查询前,必须先理解 PDO 是如何管理事务的。事务支持四大特性(ACID
- openpyxl是一个第三方库,可以处理xlsx格式的Excel文件。pip install openpyxl安装。读取Excel文件需要导
- 前言得益于 Vite 卓越的前端开发体验,越来越多的 Electron 项目也开始应用它来构建开发。翻阅各种社区资源可以发现很多基于 Vit
- 选择正确的数据列类型能大大提高数据库的性能和使数据库具有高扩展性。在选择数据列类型时,请从以下几个方面考虑:存放到数据列中的数据类型。数据值
- json 模块Python 提供了内置的 json 模块来处理 JSON 格式的文件。该模块主要分为读取和写入 JSON 文件。读取 JSO
- 1、问题:安装VSCode后打开,发现显示的语言为英文,想显示为中文?2、解决方法:2.1、快捷键CTRL+SHIFT+P,找到如下设置Co
- 我在跑爬虫程序的时候,由于爬虫程序的等待目标服务器返回数据的时间很长,而cpu占用很低,所以经常挂着代理一跑就跑好几百个。但是爬虫程序通常是
- 案例:如果我们起了一个协程,但这个协程出现了panic,但我们没有捕获这个协程,就会造成程序的崩溃,这时可以在goroutine中使用rec
- 原来工作中曾经碰到过UL列表里一些异常的表现,加上昨天看到了http://bbs.blueidea.com/thread-2984871-1
- 很久以前就知道微软的Petshop的很经典,昨天抽出时间去学习,一开始还真的不适应,什么成员资格,还真的看不太懂,运行petshop想从登陆
- 为了更好的理解这些基本操作,下面会通过读取一个股票数据,来进行Pandas基本数据操作的语法介绍。# 读取文件(读取保存文件后面会专门进行讲