小议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”实例,没有宏观的明细的语言体系把握,学人(特别是初学者)看得一个头两个大,晕头转向实属正常,不晕才怪!


 

标签:框架,javascript
0
投稿

猜你喜欢

  • Windows存储 SQL行溢出 差异备份及疑问

    2008-12-24 15:22:00
  • Python 计算机视觉编程进阶之OpenCV 进行霍夫变换

    2022-02-10 07:23:08
  • Python for Informatics 第11章 正则表达式(一)

    2021-01-27 06:43:43
  • 怎样在SQL Server 2005中用证书加密数据

    2009-01-04 14:11:00
  • Django 开发环境配置过程详解

    2022-05-16 01:53:04
  • 计算机科学中32个常用的基础算法

    2023-01-25 16:50:19
  • 在python plt图表中文字大小调节的方法

    2021-04-21 04:40:28
  • 设计输入了些什么?

    2008-04-02 11:16:00
  • Oracle数据表分区的策略

    2010-07-28 12:59:00
  • uniapp实现微信小程序的电子签名效果(附demo)

    2024-04-19 09:55:39
  • Centos7.2 编译安装PHP7.0.2的步骤

    2023-10-08 12:51:29
  • 一文带你了解Go语言标准库math和rand的常用函数

    2024-02-22 07:24:24
  • python操作MySQL数据库的方法分享

    2024-01-13 16:11:54
  • 如何让12px以下的文字最佳显示

    2008-01-24 18:39:00
  • php+highchats生成动态统计图

    2024-05-02 17:19:08
  • python采集天气数据并做数据可视化

    2022-07-16 15:26:39
  • Python实现的计数排序算法示例

    2022-07-27 15:03:55
  • Python利用operator模块实现对象的多级排序详解

    2023-09-26 20:11:09
  • 用javascript给表格加滚动条

    2008-10-15 10:03:00
  • python requests.post请求404问题及解决方法

    2022-08-16 09:36:23
  • asp之家 网络编程 m.aspxhome.com