这段代码是Liferay 5.1版本的代码,主要功能是实现浏览器版本的判断,以根据浏览器的不同调用不同css,实现多浏览器兼容。本文秉着学习JS的态度逐步的对Liferay的一些有用的js代码进行解析,JE上面这方面的高人很多,说得不对的地方非常期望可以得到各位高人的指正。另外也希望对一些和我一样的新人有所帮助。
这一段代码主要是对jQuery的一个j2browse的插件进行了包装,使用自己的变量命名需要来命名。对于初学者来说这样的写法可能比较难以理解。首先是
可能会有疑惑,定义一个变量不是var开头吗?从JE上面一些锁定的老帖http://www.iteye.com/topic/19506,大家都知道javascript是可以隐式声名变量的。但要注意,隐式声名变量总是被创建为全局变量。这种写法的意思就是将Liferay.Browser这个对象声明为全局变量。
再看
{}是js里面对象直接量的写法,在js中,对象属性也可以是函数,而不仅仅是数字字符串。这样的写法我所知道的带来的好处是:js中对象属性可以通过.来调用,而通过.来调用从外观上是很符合其它语言的习惯的,比较易读。在{}内定义了函数后,就可以通过Liferay.Browser.init()这样的方式来完成调用了。也就是接下来的
这一段jQuery();实际上就是执行了一个函数,这个jQuery()的函数的参数也是一个function,可以理解为jQuery(var);同alert("error");对比就非常容易理解了。很多新人对于jquery的写法很困惑,跟平常用的一些简单的验证脚本的js写法都不一样,其实最容易混淆和难以接受的概念就是函数function也可以作为一个变量一个参数来传递。
而其实上面的整个代码,你可以这样来理解:
还有一点,通常看到的function的形式都是 function a(){}的形式,这里的function()函数名都没有。这是js的匿名函数,js允许这样的匿名函数。通常这种匿名函数都用在被作为参数传递的场合,在jQuery的应用中非常常见。
一点小小经验心得,权当学习记录,贻笑大方了,肯盼赐教。
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.iteye.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的应用中非常常见。
一点小小经验心得,权当学习记录,贻笑大方了,肯盼赐教。