更新 core 层.
之前谈过, 模块化开发, Core – Sandbox – Module
Core -> 注册/注销机制 + 消息通讯机制.
Sandbox -> 对 Module 提供 api.
Module -> 匿名函数进行独立开发.
- 支持先触发, 后注册.
[?支持性弱]
update: 2012-01-01 10: 20.
当触发事件时, 如果不存在此事件绑定, 则做记录;
当事件绑定时, 去扫描记录, 如果存在记录, 就执行处理函数, 但记录保留, 以备同时注册的同名事件使用;
当再触发已记录事件(b)时, 此时已绑定事件, 则直接执行处理函数. 此后, 再绑定同名事件时, (b) 处理函数不再执行.update: 2012-01-01 11: 22.
换个角度思考, [ps: 当前解决的问题, 它本身是用来解决什么问题的, 求的是最终问题的解决方案]. 消息通讯机制, 是为了通知各个模块界面状态 – [起始页项目如此]; 而界面状态最终肯定只有一个, 即要么a, 要么b, 不能同时a/b; 那么先触发后注册问题, 也就是记录最后状态问题; 即把最后一种 type, arguments 记录下即可.
(ps: 这个问题值得再思考] - 支持延迟加载 JavaScript 文件 [很少用户会使用的功能, 可延迟加载]
目前仅支持单个脚本.
- 扩展 notify 参数格式支持.
原 notify 时, 参数格式仅支持 单个参数 或 json 格式. 更新后的, 支持任意格式, 可以多个参数.
api.notify('event-name', 'test'); api.notify('event-name', 'a', 'b', 'c'); api.notify('event-name', {a: 'a', b: 'b'}); // 本质是一个参数.
1月份花时间会对 sandbox 层, 进行整理, 然后在不同项目中, 使用统一扩展. [即共用扩展]
2012 年, 有很多事情要做…….
- 花一定时间陪小石头, 陪她一起成长.
- 锻炼身体. 保证良好的身体才能陪小石头, 才能正常工作. 各种户外, 组内活动.
- 坚持参加交流会. 了解行业基本动向. 开拓下视野. 和朋友见见面, 聊聊天, 吃饭.
- 部门内做分享. 自己理清思路, 大家指点, 提建议. 和其它部门合作, 了解设计模式/数据结构/算法.
- 尝试在项目中使用 html5 (css3/JavaScript api);
- 提高海外组生产力. 各种节省时间工具, 充分利用现有环境.
写在 2011
2011年 还有 6个小时就过去了~
- 2011年, 小石头出生. 现在11月大, 会走路了.
- 2011年, 给火车站贡献了很多, 回了n次家.
- 2011年, 对前端技术有个更进一步的认识, 谢谢 w3ctech 交流会, webrebuild, 谢谢同事和朋友 g3g4, ck, leilei, 超人的哥哥, 胖子, 四姐, 法师, 宇宙…
- 2011年, 在部门做了几次分享, 收获了很多. 特别是了解到很多好想法. 收了很多好建议, 并且合适/合理的都已经应用到项目中:)
- 2011年, 看到好些书, 什么 JavaScript, css, html5, ppt, 插画, 程序开发理论, 敏捷开发. 还有悟空传[ps: 被同事说, 不是我这个年龄看的], 考拉小巫英语, 黑客与画家…
- 2011年, 结识几个死党. @狮子, @离谱, @usual.
- 2011年, 同事们教会我玩三国杀, 尽管自己经常杀自己人. 不过大家都很 High.
- 2011年, 参加了大大小小的户外活动. 海陀, 香山, 八大处… 很多很多…. [ps: 程序员更应该锻炼身体. - 自己算程序员吧, 也是写代码的].
- 2011年, 入手了 mac air. 正在试用阶段. Android系统手机. 入门卡片相机. 跳舞毯. 乐高积木.
- 2011年, 开始玩微博, 听豆瓣fm.
- 2011年, 看了N部电影.(龙门飞甲, 十三钗, 速度与激情5, 加勒比海盗, 哈利波特, 全球热恋, 盗梦空间, 阿甘正传[第几次], 窃听风云2, 敢死队…)
- 2011年, 在水群水的最多的一次. 不过也学习到很多东西.
2012 来吧~
curry JavaScript
JavaScript 函数值得去挖掘. 今天用到下面:
function proxy(a) { return function (b) { return a + b; } } var test = proxy(5); var result = test(6); console.log(result);
使用一函数生成一函数, 此函数把参数当作固定值[此参数也是通过变量传递来的]在生成的函数中使用.
后来找到相关资源, 原来叫 JavaScript Curry 化.
@update 2012-01-01 09: 33
// from 《JavaScript Patterns》 function schonfinkelize(fn) { var slice = Array.prototype.slice, stored_args = slice.call(arguments, 1); return function () { var new_argus = slice.call(arguments), argus = stored_args.concat(new_argus); return fn.apply(null, argus); }; }
@update: 2012-01-03.
jQuery 中的 proxy 使用此方法.
JavaScript api 中有新的 bind 方法.
if (!Function.prototype.bind) { Function.prototype.bind = function (oThis) { if (typeof this !== "function") { // closest thing possible to the ECMAScript 5 internal IsCallable function throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); } var aArgs = Array.prototype.slice.call(arguments, 1), fToBind = this, fNOP = function () {}, fBound = function () { return fToBind.apply(this instanceof fNOP ? this : oThis || window, aArgs.concat(Array.prototype.slice.call(arguments))); }; fNOP.prototype = this.prototype; fBound.prototype = new fNOP(); return fBound; }; }
资源:
- Google Curry JavaScript
- http://julabs.me/blog/front/curry-javascript-intro/
- http://www.svendtofte.com/code/curried_javascript/
- http://stackoverflow.com/questions/113780/javascript-curry-what-are-the-practical-applications
- http://www.dustindiaz.com/javascript-curry/
- https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind
