liferay的JS代码基础解析

时间: 2008-9-08 - 分类: JavaScript - 评论: 0 - 阅读: 926 次

这段代码是Liferay 5.1版本的代码,主要功能是实现浏览器版本的判断,以根据浏览器的不同调用不同css,实现多浏览器兼容。本文秉着学习JS的态度逐步的对Liferay的一些有用的js代码进行解析。

Liferay.Browser = {
	init: function() {
		var instance = this;
		var version = instance.version();
		var exactVersion = instance.version(true);
		instance._browserVars = {
			agent: '',
			is_firefox: false,
                       ...节约篇幅略去部分代码
			is_mozilla: false,
		};
		instance._browserVars.agent = instance.browser().toLowerCase();
                ...
		jQuery.extend(instance, instance._browserVars);
	},
	browser: function() {
		var instance = this;

		return jQuery.browser.browser;
	},
	compat: function() {
		var instance = this;
		for (var i in instance._browserVars) {
			if (!window[i]) {
				window[i] = instance._browserVars[i];
			}
		}
	},
	version: function(exact) {
		var instance = this;
		if (!exact) {
			return jQuery.browser.version.major;
		}
		else {
			return jQuery.browser.version.string;
		}
	},
	_browserVars: {}
};
jQuery(
	function() {
		Liferay.Browser.init();
	}
);

这一段代码主要是对jQuery的一个j2browse的插件进行了包装,使用自己的变量命名需要来命名。对于初学者来说这样的写法可能比较难以理解。首先是

Liferay.Browser={...};

可能会有疑惑,定义一个变量不是var开头吗?从JE上面一些锁定的老帖http://www.javaeye.com/topic/19506,大家都知道javascript是可以隐式声名变量的。但要注意,隐式声名变量总是被创建为全局变量。这种写法的意思就是将Liferay.Browser这个对象声明为全局变量。

再看

Liferay.Browser={...};

{}是js里面对象直接量的写法,在js中,对象属性也可以是函数,而不仅仅是数字字符串。这样的写法我所知道的带来的好处是:js中对象属性可以通过.来调用,而通过.来调用从外观上是很符合其它语言的习惯的,比较易读。在{}内定义了函数后,就可以通过Liferay.Browser.init()这样的方式来完成调用了。也就是接下来的

jQuery(
	function() {
		Liferay.Browser.init();
	}
);

这一段jQuery();实际上就是执行了一个函数,这个jQuery()的函数的参数也是一个function,可以理解为jQuery(var);同alert(“error”);对比就非常容易理解了。很多新人对于jquery的写法很困惑,跟平常用的一些简单的验证脚本的js写法都不一样,其实最容易混淆和难以接受的概念就是函数function也可以作为一个变量一个参数来传递。

而其实上面的整个代码,你可以这样来理解:

a = {1,2,3};
alert(a.1);

还有一点,通常看到的function的形式都是 function a(){}的形式,这里的function()函数名都没有。这是js的匿名函数,js允许这样的匿名函数。通常这种匿名函数都用在被作为参数传递的场合,在jQuery的应用中非常常见。

标签:

发表评论