请熟悉jquery 的达人解释下这段代码的意思!

jasonM2008 2010-08-10 09:21:34


var mac = {};
if (jQuery)
(function() {
$.extend($.fn, {
mac : function() {
var func = arguments[0];
arguments[0] = this;
return eval('mac.' + func).apply(this, arguments);
},
seek : function(name) {
return $(this).find('[name=' + name + ']');
}
});
})(jQuery);




这种写法是个啥意思? if(jQuery)(....); 没明白意思!我对javascript不熟悉,这种写法咋这么诡异?

arguments[0] 这东西哪里来的??
最好能每句都解释下,谢谢。。感激不尽!
...全文
143 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqkjj 2010-08-11
  • 打赏
  • 举报
回复
if (jQuery) // 如果页面引入了jQuery库
//下面这段代码简化为(function() { ... })(jQuery)
// (1)定义了一个匿名函数 (2)以jQuery为实际参数执行该函数
// 以jQuery为参数执行该函数的实际用处在于,函数定义的$会被以jQuery替代。
(function() {
// 因为以jQuery作为实参执行本函数,因此这里实际是执行
// jQuery.extend(jQuery.fn,....)
// 所以总的意思就是在jQuery的实例方法上增加方法 mac()和seek()方法
$.extend($.fn, {
mac : function() {
// arguments是JS的函数对象Function的属性,表示函数调用参数集合引用
// 例如 $(....).mac(arg1,arg2,arg3....)时,
// 这个值就是mac函数的第一个参数arg1
var func = arguments[0];
arguments[0] = this;
// 从这里看arg1应该是一个已经存在的函数的一部分
// eval()实际上是获取mac.xxxxx这个函数的实际定义,
// 和java里面利用反射机制获取类的方法并调用的想法是一样一样的
return eval('mac.' + func).apply(this, arguments);
},
seek : function(name) {
// 找到元素name属性为参数name指定值的元素
return $(this).find('[name=' + name + ']');
}
});
})(jQuery);
qysnowqy 2010-08-11
  • 打赏
  • 举报
回复
arguments[0]是当前函数的第一个参数,jQuery是个对象吧?在js中if(a),只要a不为null或是undifine的话,都为true,比如
if(a=5){
alert("sss");
}
这样也会输出的。
apply:例如
func.apply(this,'a');意思用this调用func函数,参数是‘a’。

eval的例子

<script type="text/javascript">

eval("x=10;y=20;document.write(x*y)")
document.write("<br />")

document.write(eval("2+2"))
document.write("<br />")

var x=10
document.write(eval(x+17))
document.write("<br />")

eval("alert('Hello world')")

</script>


其它的楼主多看帮助文档噢
wqkjj 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jasonm2008 的回复:]

懂了,类比于C语言的函数指针,
void func()
{
.....
}

func(); //调用
也可以这样
typedef void (*pfn)();
pfn = func;
pfn();


然后再javascript 里面
直接把函数体当做类似于pfn 的作用!整个当做函数名字!
太诡异的javascript 了!
[/Quote]

可以这样理解。
JS是一个动态语言,它和Java、 C这些静态语言有很多不同,非常灵活;副作用是代码比较难读懂,同时因为没有安全类型检查,因此代码也常易出错。
wqkjj 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jasonm2008 的回复:]

LS 两位回答的很详细,谢谢。我就想不通了。
if()()
这种形式,很诡异,应该来说是if(){} 这样才对撒。。。。。
[/Quote]

LZ看错了,其实的代码意思是这样的
if (jQuery)
{
(function() {....})(jQuery)
}

#5楼答复{}省略也是对的。

jasonM2008 2010-08-11
  • 打赏
  • 举报
回复
懂了,类比于C语言的函数指针,
void func()
{
.....
}

func(); //调用
也可以这样
typedef void (*pfn)();
pfn = func;
pfn();


然后再javascript 里面
直接把函数体当做类似于pfn 的作用!整个当做函数名字!
太诡异的javascript 了!
sweetbai 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jasonm2008 的回复:]
LS 两位回答的很详细,谢谢。我就想不通了。
if()()
这种形式,很诡异,应该来说是if(){} 这样才对撒。。。。。
[/Quote]

jj哥:"//下面这段代码简化为(function() { ... })(jQuery)"

if()后面的"{}" 可以省略....................
jasonM2008 2010-08-11
  • 打赏
  • 举报
回复
LS 两位回答的很详细,谢谢。我就想不通了。
if()()
这种形式,很诡异,应该来说是if(){} 这样才对撒。。。。。
simaa0106 2010-08-11
  • 打赏
  • 举报
回复
jj哥好威武。学习了。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧