gpt4 book ai didi

javascript 关闭 : implicit parameters, 调用者

转载 作者:行者123 更新时间:2023-11-30 18:04:29 25 4
gpt4 key购买 nike

我需要对 javascript 调用的元数据进行一些说明。提供的下面代码具有从 AnotherFunction 的每个循环中调用的 SenderAsParameterFunc 和 NoExplicitParametersFunc。

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”必须作为参数(第一个?)包含在函数内才能访问。

=============

REF1:

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 都是一样的,但是实际应该怎么用,最正确的方法呢?引用资料将不胜感激!

谢谢。

最佳答案

TL;DR:在您的情况下这无关紧要,但如果您有疑问,请使用 currentTarget


我不太明白你的第一个问题,但是关于第二个问题......

当一个事件被调度时,这个事件通常会冒泡,例如在这个页面上:

<body>
<div>
<img src="foobar.png" />
</div>
</body>

如果用户单击 div 中的 img 元素,它将以这种方式触发事件

body - capturing
div - capturing
img - at target
div - bubbling
body - bubbling

因此,您可以向 body 添加一个监听器,您将捕获该事件。但是为了让您知道实际点击了哪个元素(在本例中为 img),它提供了 event.target 属性(在 Internet Explorer 上为 srcElement ).

delegateTarget 是 jQuery 添加的属性,如果您使用事件委托(delegate),它会提供额外的信息。我不知道它到底是什么,但你可以看看at the documentation

最后 currentTarget 是您附加事件的元素,如果我们将监听器添加到 body 它将是 body。所以每个事件的参数是

fire body.click with { target: img, currentTarget: body }
fire div.click with { target: img, currentTarget: div }
fire img.click with { target: img, currentTarget: img }
fire div.click with { target: img, currentTarget: div }
fire body.click with { target: img, currentTarget: body }

根据您的工作,您将需要一个或另一个属性。

关于javascript 关闭 : implicit parameters, 调用者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16145193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com