gpt4 book ai didi

javascript - 如何将一段代码(及其函数范围)传递给javascript中的多个函数

转载 作者:行者123 更新时间:2023-11-29 10:46:40 27 4
gpt4 key购买 nike

我在 js 中得到了几个函数(例如这里的第二个代码示例 (moveLeft)),它们部分使用了相同的代码部分 (prepareMove)。(如果我只是在 moveLeft 中复制 prepareMove,代码工作得很好)

我想要发生的事情 事件发生 -> prepareMove 启动 -> moveLeft 启动(同时访问 prepareMove 函数范围)

我想在 moveLeft 中简单地调用 prepareMove 会导致一些范围问题,因为 moveLeft 无法检索在 prepareMove 中分配的值。

我该如何解决这个范围问题?我可以使用像 django 的 block.super 这样的东西吗(〜将父容器中的代码传递给子容器并执行两者)?在 javaScript 中处理这个问题的正确方法是什么?

function prepareMove() {
var getCurrent = ptPageXYZarray.filter( function (el) {
return el.isCurrent === true;
})[0];

var currentX = getCurrent.x,
currentY = getCurrent.y,
currentZ = getCurrent.z,
currentYmax = getCurrent.yMax,
currentZmax = getCurrent.zMax;

var newCurrent = function (a,b,c) {
newCurrent = ptPageXYZarray.filter(function(obj) {
return obj.x == a && obj.y == b && obj.z == c;
});
return newCurrent;
};

var outAnimation = function (outAnimationClass) {
getCurrent.ptPageObj.className += ' ' + outAnimationClass;
function removeOutAnimation() {
removeClass(getCurrent.ptPageObj, outAnimationClass);
}
setTimeout(removeOutAnimation,700);
};

...
}

还有第二个功能

function moveLeft() {
prepareMove(); //scope issues here?
if (currentZ === 0 && currentY !== 0) {
newCurrent(currentX,currentY -1,currentZ);

outAnimationClass = "mm-page-visible mm-page-moveToRightFade";
outAnimation(outAnimationClass);

swapCurrentEls();

inAnimationClass = "mm-page-visible mm-page-moveFromLeft";
inAnimation(inAnimationClass);

} else
...
};

在事件中我启动了 moveLeft 函数

moveLeft();

正在进行的工作(使用箭头):http://www.mymlyn.com//page-templates/css-transitions-keyboard/

比特桶:[https://bitbucket.org/mymlyn/mymlyn.com/overview][2]

最佳答案

实现此目的的最简单方法是使用对象。 prepareMove 将使用您想要的所有属性填充并返回对象,moveLeft 将使用它们。

也可以稍微改变结构:

function effect() {

// private

var getCurrent = ptPageXYZarray.filter( function (el) {
return el.isCurrent === true;
})[0];

var currentX = getCurrent.x,
currentY = getCurrent.y,
currentZ = getCurrent.z,
currentYmax = getCurrent.yMax,
currentZmax = getCurrent.zMax;

...

var r = { };

// public (everything in r)

r.left = function( ) {
if (currentZ === 0 && currentY !== 0) {
newCurrent(currentX,currentY -1,currentZ);

outAnimationClass = "mm-page-visible mm-page-moveToRightFade";
outAnimation(outAnimationClass);

swapCurrentEls();
...
} ...
};

r.right = function( ) {
...
};

...

return r;
}

现在您可以像 effect( ).left( )effect( ).right( ) 那样调用它。仅调用 effect( ) 即可完成准备工作,但由于这实际上并没有做任何事情,所以这并不重要。您还可以使用私有(private)函数和其他奇特的东西。

至于你原来的问题,不,你不能设置你正在调用的函数的范围。只有 this 变量(通过 call 或类似方式)。

关于javascript - 如何将一段代码(及其函数范围)传递给javascript中的多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18166712/

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