var app = {
config: {
clickMessage: ‘你好!’
},
clickHandler: function() {
alert(this.config.clickMessage);
}
};当我们调用如”app.clickHandler()“时,”clickHandler“会将”app”作为其上下文。这意味着在这里”this“关键字将允许其访问”app“。这在我们简单调用下面函数时没什么问题:
app.clickHandler(); // “你好!” 消息触发
让我们试试将其作为事件绑定会有什么情况:
jQuery(‘a’).bind(‘click’, app.clickHandler);
当我们点击一个链接的时候什么都不会发生,函数不会工作。这是因为jQuery(其他任何正常的事件模型同样如此)默认会把目标元素a设置成为事件的上下文。即”this”现在其实是指刚刚被点击过的元素a。但我们实际上并不想这样子的。我们期待”this”应该被设置为”app”.在jQuery 1.4中实现这个再简单不过了:
jQuery(‘a’).bind(
‘click’,
jQuery.proxy(app, ‘clickHandler’)
);
现在无论什么时候一个链接被点击到,”你好”的消息都会被触发了!
proxy函数会返回一个你的函数被”包装过”之后的对象,在该对象中,”this”被设置成任意你指定的对象。这在其他的情景下同样有用,如传递回调函数给其他的jQuery对象或者一些插件的时候。
更多关于jQuery.proxy
7. 在动画中添加停顿
现在你可以再你的动画队列中添加停顿效果了。事实上,任何队列中都可以添加该函数,但最常用的情况应该还是在使用”fx”队列的时候。这允许你在多个动作中间添加暂停而不需要通过回调函数去调用”setTimeout“。”.delay()” 函数的第一个参数是你想停顿的毫秒数。
jQuery(‘#foo’)
.slideDown() // Slide down
.delay(200) // 停顿 200 ms
.fadeIn(); // Fade in
如果你想给其他不是默认的”fx”的队列也添加停顿的话,这时候,你需要将队列名作为第二个参数传递给”.delay()“。
更多关于.delay(…)
8. 检查元素是否拥有某对象
通过”.has()”方法,jQuery 1.4使得检查一个元素(或者集合)是不是有某对象变得相当简单。从程序角度看,它和jQuery的selector过滤器”:has()”是一样的。该方法会返回在当前集合中所有包含有至少一个符合条件的元素数组。
jQuery(‘div’).has(‘ul’);
上面方法会返回所有包含有UL元素的DIV元素数组。在这种情况下,你可能会更倾向于简单使用选择器的过滤器(“










