`
- 浏览:
962653 次
- 性别:
- 来自:
上海
-
在这次D2上,玉伯介绍了KISSY。我听下来,KISSY有不少设计和我断断续续做的PIES框架的设计是类似的(或许现在的JS类库在许多设计思路上必然会有许多共识)。但是seed、meta之类的概念就不容易理解。后来我看了一下,原来这些概念是爱民给加上的,嘿嘿。当然,即使不看爱民的解说,我们也可以了解大概思路,是系统可从seed动态演化出来。但是meta这样的抽象就有些学院派,特别是不像爱民的QoBean项目本来就是要做元编程,在KISSY内,这个抽象只对内,不对外,也不直接解决实践中构建系统的关键问题,比如namespace和module。meta的作用其实只是使得内核具有一个更加精巧的核心。所以这样过于“务虚”的抽象对于听众来说无疑是天书。
好吧,这个起头有点长,其实本篇blog想要讨论的只是KISSY中的一个很小的点:DOM.attr的API设计。
这个API(我稍作了简化)是这样滴:
attr ( element, attrName )
获取元素的属性值。
attr ( element, attrName, value )
给元素设置属性值。
你可以注意到,这里其实是函数重载(overload),两个参数是返回属性值,而三个参数是设置属性值。KISSY中有不少API都是类似的。
然而这种API设计我认为大有问题。原因很简单,重载方法(函数)的参数虽然不同,但是同样名字的方法(函数)干的事情应该是相同的。而在这里,两个重载方法(函数)做的事情却正好相反!
我们考虑一下实际编程的情况,许多时候参数本身就是一些方法调用的结果,因此整个调用序列可能就比较长。在这种情况下,你很难一眼看出这个调用到底是几个参数,因此当然也不知道这里到底是取值还是赋值。
所以这种API可能导致程序可读性的严重下降。
那么在什么情况下,相同名字而相反意义才是可行的?属性就是这样一个例子。因为a和a=(赋值)的区别还是非常明显的。然而即使如此,我们还经常遇到a=1和a==1的混淆。
另一个可行的案例有些语言是用a()和a(v)来作为getter/setter的写法。因为“没有参数”的调用和带有一个参数的调用,其区分还是相当明显的,况且这些语言中很可能允许省略无参调用的括号,那么a和a(v)的差异就更一目了然了(而且还不会有a=1和a==1的混淆)。但是,有一个参数和有两个参数的区分就不那么明显了,而像attr这个例子是两个参数和三个参数,那就更难分辨了。
所以回到最普遍的情形,对于方法(函数)的重载来说,应该坚守这个原则:重载方法(函数)干的事情应该是相同的。相比attr,setAttr和getAttr虽然多了几个字符,但是能确保程序的可读性。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Kissy 是一个由淘宝开发并开源的JavaScript库,它的设计目标是为Web开发者提供一套全面、强大且易用的UI组件。Kissy 的出现旨在简化Web应用的开发过程,提高开发效率,尤其在构建复杂的前端界面时表现出强大的优势。...
而KISSY框架则针对这些问题提供了一个全新的解决方案,它致力于模块化、跨终端支持以及易用性,特别适合于开发电子商务网站等复杂交互的Web应用。 KISSY框架的适用场景主要包括Web页面开发,尤其是电商平台的页面,...
标题中的“Kissy Suggest”是指Kissy框架中的一个组件,Kissy是一个轻量级的JavaScript库,专注于前端开发,提供了丰富的组件化功能。Suggest组件则是Kissy中用于实现自动提示、补全功能的部分,常见于搜索框或...
Kissy 是一个由淘宝开发的前端JavaScript库,它旨在简化Web开发,提高代码质量和性能。Kissy 提供了一种模块化的解决方案,使得开发者能够更好地组织和管理他们的代码,同时提供了丰富的组件来支持日常的Web开发任务...
Kissy Suggest 是一个基于 JavaScript 的开源库,专为实现自动提示功能而设计。本文将深入探讨 Kissy Suggest 的工作原理、使用方法以及其在实际项目中的应用。 Kissy Suggest 是 Kissy 项目的一个组件,Kissy 是一...
Kissy是一个轻量级的JavaScript库,专注于前端开发,而Kissy富文本编辑器则将这种轻量级的优势带入了内容编辑领域。 Kissy Editor的核心特点包括但不限于以下几点: 1. **模块化设计**:Kissy Editor遵循Kissy框架...
KISSY,一个在前端开发领域中被广泛使用的轻量级UI类库,以其小巧、灵活和实用的特点,赢得了众多开发者们的青睐。本篇文章将深入探讨KISSY的核心特性、应用场景以及如何有效地利用它来提升开发效率。 首先,我们来...
在实际使用中,KISSY可以作为项目的基石,提供底层的模块管理和UI组件,而TinyEditor可以作为其中的一个模块,用于实现页面内的文本编辑功能。两者结合,既能享受到KISSY带来的强大功能和可扩展性,又能利用...
KISSY是一个轻量级、模块化的JavaScript库,尤其适合中国开发者,因为它内置了对中文字符集的支持,并且提供了丰富的组件和API,便于构建复杂的Web应用。下面我们将深入探讨这个项目可能涉及的关键知识点。 1. **...
在本文中,我们将深入探讨如何使用KISSY框架来实现视差滚动效果。KISSY是一个轻量级的JavaScript库,旨在提供一个简洁且强大的工具集,帮助开发者快速构建复杂Web应用。视差滚动是一种增强网页用户体验的视觉技巧,...
KISSY 是一个轻量级的JavaScript库,旨在简化前端开发工作,它提供了丰富的组件和API,可以方便地进行各种前端任务,包括图片裁剪。"新增KISSY图片裁剪插件.zip"这个压缩包文件就是一个利用KISSY实现的图片裁剪功能...
"imagezoom: KISSY 图像放大"是一个基于JavaScript库KISSY的插件,用于实现网页中的图像放大功能。KISSY是一个轻量级、模块化的前端开发框架,它提供了一种简单的方式来组织和管理JavaScript代码,尤其适用于大型Web...
Layer-anim则是KISSY的一个扩展,专门用于实现动画效果。它提供了丰富的动画API,开发者可以通过简单的调用来创建出各种复杂的动画,包括平移、旋转、缩放等。Layer-anim与KISSY的结合,使得digitalScroll能够实现...
Kissy是一个轻量级、模块化的JavaScript库,它允许开发者通过简单的API来构建复杂的Web应用。 在JavaScript编程中,这样的组件通常实现为一个小型的插件或者函数,它可以被绑定到页面的某个元素上,如一个按钮或...
【BUI后台示例】是基于BUI和Kissy框架构建的一个管理页面示例,它主要展示了如何在后台系统中实现高效、易用的交互功能,包括文件上传和表单表格的处理。在这个项目中,BUI(Business UI)作为前端用户界面库,提供...
淘宝在线编辑器JAVA版是一款基于KISSY Editor的富文本编辑器,专为Java开发者设计,支持文件上传功能。KISSY Editor是阿里巴巴开源的一款强大的JavaScript富文本编辑器,而这个JAVA版则提供了与服务器端交互的能力,...
首先,draggable.js是基于KISSY框架实现的,KISSY是一个开源的JavaScript组件库,提供了丰富的DOM和事件操作API,为构建复杂Web应用提供了便利。在draggable.js中,主要利用了浏览器的事件模型和DOM操作,实现了拖拽...
- **背景**:考虑到淘宝用户中仍有一定比例使用老旧浏览器的情况,淘宝团队开发了KISSY库,旨在提供一个兼容性强且功能丰富的前端框架。 - **解决方案**:KISSY库针对不同的浏览器环境提供了不同的实现方案。例如,...