我需要对 javascript 调用的元数据进行一些说明。下面提供的代码具有 SenderAsParameterFunc 和 NoExplicitParametersFunc,它们是从 AnotherFunction 的每个循环中调用的。
var Obj = function(){
Obj.SenderAsParameterFunc = function(sender, param1, param2){
// log $(sender).id;
}
Obj.NoExplicitParametersFunc = function(){
// EXTRACT DEFAULT SENDER/CALLEE
// I see in console Obj.NoExplicitParametersFunc.caller.arguments >> SEE REF1
}
Obj.NoExplicitParametersFuncWithExtraArgs = function(this, par1, par2){
// 'this' from each loop?
}
Obj.AnotherFunc = function(){
var X = $('myselect');
var par1 = 1;
var par2 = 'bla';
$.each(X.find("option"), function () {
Obj.SenderAsParameterFunc(this, par1, par2);
// 'this' here references current object from 'each' loop
});
$.each(X.find("option"), Obj.NoExplicitParametersFunc);
// must be equvalent to first var,
// but to extract 'inner' this we have to do more magic in NoExplicitParametersFunc...
var par1 = 1;
var par2 = 'bla';
$.each(X.find("option"), Obj.NoExplicitParametersFuncWithExtraArgs);
}
}
那么应该在 NoExplicitParametersFunc 中写入什么来访问每个选项,就像在 SenderAsParameterFunc 中使用 $(this) 完成的那样?
==========
好的,总结一下我学到的东西:如果一个函数没有参数
$.each(X.find("option"), Obj.NoExplicitParametersFunc);
然后'this'默认传递并且可以在函数中访问。
如果函数有参数
$.each(X.find("option"), function () { Obj.SenderAsParameterFunc(this, par1, par2); });
那么 'this' 必须作为参数包含在函数中(首先?)才能在函数中访问。
==============
参考1:
b.Event
altKey: undefined
attrChange: undefined
attrName: undefined
bubbles: true
cancelable: false
ctrlKey: undefined
currentTarget: input#inputId
data: undefined
delegateTarget: input#inputId
eventPhase: 2
handleObj: Object
isDefaultPrevented: function ot(){return!1}
jQuery19105656534675508738: true
metaKey: false
originalEvent: Event
relatedNode: undefined
relatedTarget: undefined
shiftKey: undefined
srcElement: input#inputId
target: input#inputId
timeStamp: 1366622725473
type: "change"
view: undefined
which: undefined
__proto__: Object,
currentTarget、delegateTarget、srcElement、target 是一样的,但实际应该使用什么,最正确的方法是什么?参考将不胜感激!
谢谢。