Chris Coyer中call()的用法'的自定义事件示例
Usage of call() in Chris Coyer's example of custom events
我刚刚浏览了Chris Coyer的自定义事件示例,发现了以下代码:
$.fn.faq = function(options) {
return this.each(function(i, el) {
var base = el,
$base = $(el);
console.log(options);
base.init = function() {
// Do initialization stuff
$base
.find("dd")
.hide()
.end()
.find("dt")
.click(function() {
var ans = $(this).next();
if (ans.is(":visible")) {
base.closeQ(ans);
} else {
base.openQ(ans);
}
})
};
base.openQ = function(ans) {
// Open panel
ans.show();
// Do callback
options.qOpen.call();
};
base.closeQ = function(ans) {
// Open panel
ans.hide();
// Do callback
options.qClose.call();
};
base.init();
});
};
$("dl").faq({
qOpen: myQuestionOpenCallback,
qClose: myQuestionCloseCallback
});
function myQuestionOpenCallback() {
alert("answerswer opened!");
}
function myQuestionCloseCallback() {
alert("answerswer closed!");
}
我指的是Chris Coyer的帖子:
Chris Coyer 定制活动
在这里摆弄
现在我的问题是,为什么在这段代码中,JavaScript调用()显然没有被用来设置这个值,那么为什么要使用调用呢?这是一个好的JS实践吗?或者这只是作者的选择,因为如果我取消了以下两行代码的调用
options.qOpen.call();
options.qClose.call();
如果更改为
options.qOpen();
options.qClose();
我的插件仍然运行良好,那么为什么要使用call()呢?
我是JS和jQuery的新手。
它只是阻止作为回调传递到options对象的函数修改或访问options对象。
function myQuestionOpenCallback() {
alert("answerswer opened!");
console.log(this); // window
}
function myQuestionCloseCallback() {
alert("answerswer closed!");
console.log(this); // window
}
如果没有.call()
,它将是这样的:
function myQuestionOpenCallback() {
alert("answerswer opened!");
console.log(this); // {qOpen: function, qClose: function}
}
function myQuestionCloseCallback() {
alert("answerswer closed!");
console.log(this); // {qOpen: function, qClose: function}
}
我认为没有理由这样做(在你的特定情况下),因为使用插件的人已经完全可以访问所述选项对象。
var opts = {
qOpen: myQuestionOpenCallback,
qClose: myQuestionCloseCallback
}
$("dl").faq(opts);
function myQuestionOpenCallback() {
alert("answerswer opened!");
console.log(opts); // {qOpen: function, qClose: function}
}
function myQuestionCloseCallback() {
alert("answerswer closed!");
console.log(opts); // {qOpen: function, qClose: function}
}
相关文章:
- 如何在javascript中创建自定义事件
- 如何在d3.js中自定义事件侦听器
- jquery自定义事件混淆
- jquery可从自定义事件中排序
- 向ASP控件添加自定义事件
- 在放置目标时,输入并离开自定义事件
- Chris Coyer中call()的用法'的自定义事件示例
- 在 Chrome 扩展程序中创建自定义事件的最惯用方式
- 如何获取 jQuery 以触发本机自定义事件处理程序
- 允许在自定义事件上“查找使用实例”的 IDE
- 查看自定义事件的地理信息
- 如何在jQuery中添加函数作为自定义事件
- 试图使一个事件依赖于另一个事件,并使用jquery自定义事件传递数据
- 在命名空间中创建自定义事件
- 如何调用另一个js文件中的函数或触发一个自定义事件,该事件将参数作为Jquery中的数据对象传递
- 阻止执行自定义事件
- socket.io自定义事件的确认
- jQuery:存储自定义事件之间的数据
- 如何使用Google Analytics添加自定义事件跟踪
- 如何在谷歌分析上跟踪自定义事件