function $(id) {
if (id) {
if (window === this) {
return new $(id);
}
this.e = document.getElementById(id);
return this;
} else {
return about;
}
}
$.prototype = {
click: function () {
this.e.onclick = function () {
alert("hi..");
}
}
};
执行此代码时:
$("skg").click2();
它返回警报消息。
但我想添加一个像这样的回调函数:
$("skg").click(function(){
alert("hi SKG");
});
怎么做?
答案 0 :(得分:1)
示例1
$.prototype = {
click: function (callback) {
this.e.onclick = callback
}
};
但是如果要解析DOM元素,可以执行以下操作:
示例2
$.prototype = {
click: function (callback) {
this.e.onclick = function() {
callback.call(this);
}
}
};
但是如果你想为你的回调解析一些自定义参数,你可以在最后一个例子中这样做:
您的电话:
var handler = function(arg1, arg2, arg3, ...) {
alert("Some alert");
};
$("someID").click(handler);
示例1:
handler
将DOM元素设为this
,所以:
this = [HTML DOMElement]
handler
中的第一个参数(称为arg1
(也可以像第一个arguments
一样将变量arguments[0]
抛出数组))包含click的事件属性。
arguments[0] = [Event Object]
示例2:
this = [HTML DOMElement]
多数民众赞成。但是你有能力解析hander
:
如果您的代码是这样的:
$.prototype = {
click: function (callback) {
this.e.onclick = function(event) {
callback.call(this, event, {custom: "argument"} );
}
}
};
处理程序将获得:
arguments[0] = [Event Object]
//与示例1相同
但现在看:
arguments[1] = [Object object]
或更准确:
arguments[1] = {custom: "argument"}
和以前一样,你可以访问它arg2
但是像arguments[1]
这样的数组。
当我说数组时,我的意思是:
它有一些与数组相同的能力:
长度属性:.length
(arguments.length
)。
0指数命名:[n]
(arguments[0]
,arguments[1]
,...)
但是没有一个原生数组方法,如sort
,push
,pop
,splice
。
更多但是:)(只是一个网站注释)
您可以使用本机数组方法使用类似数组的对象:
让我们说这些论点是这样的:处理程序("a", "b", "c", "d")
你只需要第二个参数和更高的参数:
var args = [].splice.call(arguments, 0, 1)
现在args
是一个包含["b", "c", "d"]
的原生数组。
答案 1 :(得分:1)
通过call / apply等查看函数调用
function click( object, func ){
// arguments[0] == object
// arguments[1] == func
var args = []; // empty array
// copy all other arguments we want to "pass through"
for(var i = 2; i < arguments.length; i++){
args.push(arguments[i]);
}
func.apply(object, args);
}
答案 2 :(得分:0)
更改单击函数以获取方法参数并将onclick事件设置为该方法:
click : function (callback){
this.e.onclick = callback
}
答案 3 :(得分:0)
在click
功能中添加参数。
click: function (f) {
this.e.onclick = f;
}