页面加载后是否可以编辑JavaScript函数? 我想在加载后动态编辑一个函数。
答案 0 :(得分:5)
您无法编辑功能,但可以替换它,例如:
var myFunc = function() { return "Hello World"; };
myFunc = function() { return "Goodbye"; };
javascript函数是对象,因此可以通过设置新值来替换。这是你的意思吗?
答案 1 :(得分:0)
除非你试图破解一些不属于你的代码,否则更好的解决方案是编写一个更灵活的初始javascript函数,根据条件(传递的参数,环境,其他状态,获取的数据)可以调整其行为从其他来源等...)。然后,您最初可以编写一个函数来处理所有不同的情况。
您甚至可以使用设计模式,例如传递可用于在运行时调整行为的回调函数。如果您需要许多回调,您可以传入一个具有多种不同可选方法的对象,并在您的函数中调用它们。通过这种方式,您可以通过传入不同的回调函数来显着改变main函数的行为,而无需更改它的代码。
例如,假设我们有一个解析函数,它将一些标记的数据结构作为输入并返回一个结果数组。我们希望能够通过传入回调来修改此解析函数的行为。因此,我们编写解析函数来获取回调对象。该回调对象包含一个或多个方法(所有方法都是可选的)和一个传递给每个回调的状态变量。任何在Javascript中使用过Ajax或任何异步网络的人都会认识到回调对象的概念。这里有一些伪代码,用于显示如何使用回调对象。一个真正的功能显然比这个功能更多,但它希望说明这个概念:
function parseMyData(data, callbacks) {
var output = []; // output we accumulate
var currentTag;
callbacks = callbacks || {}; // make the callbacks object optional
// do any preprocessing that the caller specified
if (callbacks.preProcessData) {
data = callbacks.preProcessData(data, callbacks.state);
}
[[code to parse to the first tag in the data (after doing so currentTag contains the tag we just parsed)]]
// give our callback object the opportunity to do something to this tag or return null to skip it
if (callbacks.preProcessTag {
currentTag = callbacks.preprocessTag(currentTag, callbacks.state);
}
if (currentTag) {
[[code here for the default processing of the tag that will push results into the output array]]
}
return(output);
}
答案 2 :(得分:0)
如果要向现有函数添加操作,可以通过将其置于临时变量中并在覆盖函数中调用它来“劫持”它。 E.g。
// The original function.
function sayName(name) {
alert(name);
}
// Temporary variable for original function.
var __sayHello = sayName;
// Overwrite the original function, adding extra actions.
sayName = function(name) {
alert('Hello');
// Call the original function using its temporary variable.
__sayHello(name);
}
// Call the overwritten function.
sayName('Bob');
答案 3 :(得分:0)
如何编辑功能-101。
如果我们重新考虑在运行时编辑函数并不是绝对改变函数的胆量,而是改变函数的消化内容,那么我会说已经构建函数来做到这一点。
示例1-无法更改胆量。
function one(){
return true;
}
// one() => true;
// Note: We could still change the output without changing the guts.
// !one() => false;
示例2 =可以创建胆量来消化动态呼叫。
function one(payload){
return payload;
}
// one(true) => true;
// one(false) => false;
// one('whatever I want to feed the guts to digest');
// => 'whatever I want to feed the guts to digest';
这些是非常简单的示例,但是由于您没有提供有关要执行的操作的任何真实示例,因此我们必须假设您正在尝试正常的编程模式。
考虑 NORMAL 编程模式,不是需要更改的函数本身,而是您如何调用它。
示例3-给调用者选择哪个功能。
function firstChoice(payload){
return http.post(payload);
}
function secondChoice(choice){
return `Do something else with ${choice}`;
}
// And where you make the choice, perhaps after a click event handler...
function onClick(choice, payload){
choice ? firstChoice(payload) : secondChoice(choice);
}
功能应该是用来构建逻辑的小模块。给他们一些小事情,然后根据您的逻辑在它们之间进行选择。
在我看来,假设正常的编程需求,请回答您的问题...
“页面加载后是否可以编辑JavaScript函数?” 是。
在函数定义中使用参数来添加动态功能以满足您的需求。