2009年9月11日星期五

[note使用Javascript域

在开发一个Javascript库的时候,因为js只有全局和局部变量,为了不引起冲突,变量的命名是很重要的。如何让自己的变量的命名与其他的库或开发者的命名不冲突呢?

最好的方法就是使用“域”!

域是一个比较形象的说法,其实并并不是js里面的一个特殊关键字之类的东西。相反他是使用类实现的。

如下是一个类的代码:
function class () {
      ...
}

同样一个匿名的类的写法如下:
function () {
      ...
}
 
这样声明了一个名为class的类。调用的时候就如下:
var c = new class();

连在一起就是如下代码:
window.className = (function() {
      ...
}) ();

这样实际上就是一个全局域className.

这样我们在这域中设置变量,函数甚至是类都不大可能会与开发者的命名冲突。

另外还有另一种使用域的方法:
这是jQuery的形式:
(function() {
   var _jQuery = window.jQuery;
   var _$ = window.$;
   var jQuery = window.jQuery = window.$ = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
   };
......
......
})();
这样定义的变量属于一个匿名的域里面而不会产生冲突。
jQuery的插件也为了避免$产生冲突定义了如下代码:
(function($) {
......
})(jQuery);
这样吧jQuery传入函数,得到$的表示,很巧妙!


PS:Javascript真的是我用过的最巧妙的语言,所以也比起一般的语言要用的融会贯通的话真的难一点

没有评论: