gpt4 book ai didi

Javascript - 动态更改函数的内容

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

我有这个函数(在页面加载时)使用“css”jQuery 方法改变我的边距...

function page_change() {
var h = window.location.hash;

switch (h) {
case 'home':
$('.page-slide-box').css({marginLeft: 0});
break;
case 'history':
$('.page-slide-box').css({marginLeft: '-820px'});
break;
// more cases here.....
}
}

...但是在页面加载后,我想为更改设置动画。我在想我可以使用 replace() 更改现有函数(而不是编写另一个冗余函数),如下所示:

window.onhashchange = function() {
var get = page_change.toString();
var change = get.replace(/css/g, 'animate');
page_change();
}

这成功地将我的 page_change() 函数中的所有“css”实例更改为“动画”。替换字符串后如何使此函数动态更改?或者这只是个坏主意?

最佳答案

在你的例子中,我会说这是一个糟糕的主意。为什么不简单地定义一个可以同时执行这两项操作的函数,并相应地使用它:

var page_change = function(e)
{
var method = e instanceof Event ? 'animate' : 'css';
switch (location.hash)
{
case 'home':
$('.page-slide-box')[method]({marginLeft: 0});
break;
//and so on...
}
};

直接调用这个函数,它会设置css,像这样使用它:

window.onhaschange = page_change;

它会动画而不是使用css方法。简单

如果你想轻松测试这个,你可以试试这个:

var page_change = function(e)
{
var method = e instanceof Event ? 'animate' : 'css';
console.log(method);
};
document.body.onclick = page_change;
page_change();//logs css
//click the body and...
//animate will be logged

基本上,这就是它的工作原理。
像这样定义一个函数(匿名函数,分配给一个变量或被 var 引用)的额外好处是您可以轻松地将一个新函数分配给同一个变量:

var myFunc = function(){ console.log('foo');};
myFunc();//logs foo
myFunc = function(){console.log('bar')};
myFunc();//logs bar

这也可能对您有用……当然。您甚至可以存储旧函数:

var myFunc = function(){ console.log('foo');};
myFunc();//logs foo
var oldMyFunc = myFunc;
myFunc = function(){console.log('bar')};
myFunc();//logs bar
oldMyFunc();//logs foo

试一试,找到最适合您需求的方法(它很可能是我在这个答案中谈到的内容的组合)

关于Javascript - 动态更改函数的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14701661/

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