gpt4 book ai didi

javascript - 使用 myFuncArray.shift()() 调用函数

转载 作者:行者123 更新时间:2023-11-28 02:51:26 25 4
gpt4 key购买 nike

我在使用 shift() 调用我放入数组中的函数时遇到问题。我整理了一个简单的例子来说明这个问题。

本质上,该函数被调用,但是,对函数中变量的更改不会保留。

<html>
<head>
<script type="text/javascript">
Taco = function() {};
Taco.prototype.init = function() {
this.ex1 = "ex1 in init()";
alert(this.ex1);
};
</script>
</head>
<body>
<input type="Submit" onClick="withShift();" value="withShift"/>
<div id="div1">
</div>
<input type="Submit" onClick="noShift();" value="noShift"/>
<div id="div2">
</div>
<script type="text/javascript">
// This calls init but does not hold the value of ex1 after the call
withShift = function() {
taco = new Taco();
funcQ = [];
funcQ.push(taco.init);
funcQ.shift()();

div1 = document.getElementById("div1")
div1.appendChild(document.createTextNode(taco.ex1));
};

// this calls init and it holds the value...
noShift = function() {
taco2 = new Taco();
taco2.init();
div1 = document.getElementById("div2")
div1.appendChild(document.createTextNode(taco2.ex1));
}
</script>
</body>
</html>

预先感谢您的任何建议。

最佳答案

当您传递方法指针时,JavaScript 不会记住 this 参数。您必须在函数对象上使用 callapply 方法来显式传递 this

在传递函数指针时,使用 taco.init 与使用 Taco.prototype.init 大致相同。工作方式如下:

taco = new Taco();
funcQ = [];
funcQ.push(taco.init);
// pass taco first, and the non-hidden function arguments after;
// in this case, no other argument
funcQ.shift().call(taco);

如果你不能使用这种语法,你可以使用匿名函数:

taco = new Taco();
funcQ = [];
funcQ.push(function() { taco.init(); });
funcQ.shift()();

与不携带 this 参数的 object.method 语法相反,闭包是可靠的。

关于javascript - 使用 myFuncArray.shift()() 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681341/

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