我尝试向document
添加一些事件侦听器,但由于某种原因,click
事件似乎从未触发,因为从未调用回调:
function NotJquery(element) {
this.element = element;
return this;
}
NotJquery.prototype.eventFired = function(event, callback) {
console.log('in NotJquery prototype');
return function (event, callback) {
element.addEventListener(event, callback, true);
};
};
var $ = function(element) {
return new NotJquery(element);
};
function Test() {
}
Test.prototype.addListener = function() {
console.log('in Test prototype');
$(document).eventFired('click', function() {
console.log('click event fired');
});
};
(function() {
var test= new Test();
test.addListener();
}());
两条消息:“in Test prototype”和“in NotJquery prototype”都记录在控制台中,但是当我单击文档中的某个地方时,控制台中没有输出消息“click event fired”。我看不出我的代码有什么问题。有人有办法让它工作吗?
http://jsfiddle.net/Nn3tZ/1/
2条答案
按热度按时间ruyhziif1#
您的客户端代码预期如下所示:
工作演示:http://jsfiddle.net/Nn3tZ/2/
nlejzf6q2#
element
没有在eventFired
函数中定义(但这不是唯一的问题)。与其他语言(Java、C#)不同,
this
在引用当前对象的属性时不是可选的,另外,您在eventFired
中创建的函数将不具有正确的this
,因此我将其存储为self
,然后在生成的函数中使用self
(这是一个 * 闭包 *)。另外,您将
event
和callback
传递到eventFired
,但随后 * 还 * 在生成的函数上声明它们(我根本不清楚您为什么要在那里生成函数),因此您传递到eventFired
的那些函数永远不会被使用。更多阅读 (在我的贫血博客上):
this