编辑Javascript函数

编辑Javascript函数,javascript,function,edit,Javascript,Function,Edit,页面加载后是否可以编辑JavaScript函数? 我想在加载后动态编辑函数。您不能编辑函数,但可以替换它,例如: var myFunc = function() { return "Hello World"; }; myFunc = function() { return "Goodbye"; }; javascript函数是对象,因此可以通过设置新值来替换。这就是您的意思吗?除非您试图破解一些不属于您的代码,否则更好的解决方案是编写一个更灵活的初始javascript函数,该函数的行为可以

页面加载后是否可以编辑JavaScript函数?
我想在加载后动态编辑函数。

您不能编辑函数,但可以替换它,例如:

var myFunc = function() { return "Hello World"; };

myFunc = function() { return "Goodbye"; };

javascript函数是对象,因此可以通过设置新值来替换。这就是您的意思吗?

除非您试图破解一些不属于您的代码,否则更好的解决方案是编写一个更灵活的初始javascript函数,该函数的行为可以根据条件(传递的参数、环境、其他状态、从其他源获取的数据等)进行调整。然后,您拥有的一个函数最初可以编写一次,以处理所有不同的情况

您甚至可以使用设计模式,例如传入回调函数,这些设计模式可用于在运行时调整行为。如果需要许多回调,可以传入具有许多不同可选方法的对象,并在函数期间调用这些方法。通过这种方式,您可以显著地改变主函数的行为,而无需通过传入不同的回调函数来更改其代码

例如,假设我们有一个解析函数,它将一些标记的数据结构作为输入,并返回一个结果数组。我们希望能够通过传入回调来修改这个解析函数的行为。因此,我们编写解析函数来获取回调对象。该回调对象包含一个或多个方法(所有方法都是可选的)和传递给每个回调的状态变量。任何使用过ajax或Javascript异步网络的人都会认识回调对象的概念。下面是用于此类进程的一些伪代码,展示了如何使用回调对象。一个真正的函数显然要比这个函数复杂得多,但它很有希望说明这个概念:

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);
}

如果要向现有函数添加操作,可以通过将其放入临时变量并在覆盖函数中调用来“劫持”它。例如

// 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');
如何编辑函数-101

如果我们重新考虑在运行时编辑一个函数并不是绝对改变函数的内部结构,而是改变函数的内部结构,那么我会说函数的构建就是为了实现这一点

例1-肠子不能改变

示例2=可以创建内脏来消化动态调用

这些都是非常简单的示例,但是由于您没有提供任何关于您试图做什么的真实示例,我们不得不假设您正在尝试正常的编程模式

考虑到正常的编程模式,需要改变的不是函数本身,而是调用它的方式

示例3-为调用者选择哪个函数

函数应该是用来构建逻辑的小砖块。给他们一些小事情做,然后根据你的逻辑在他们之间进行选择

为了回答你的问题,在我看来,假设正常的编程需要

“页面加载后是否可以编辑JavaScript函数?”


在函数定义中使用参数添加动态功能以满足您的需要。

您如何定义和调用函数?为什么不能编写另一个函数?你想实现什么?我像普通函数一样定义函数示例:函数xy(){}是的,但当我定义函数示例函数test(){返回true;}如何更改此函数?+1正是我要说的:)。下面是一个示例:@PageCreator:使用如下代码
test=function(){return false;}。现在,所有未来调用的定义都已更改。您可以从事件中取出代码,在前面或后面添加一些内容,然后将其添加回事件中。编辑函数中的所有特定代码是可以做到的,但这将非常难看。让我看看我创建的exmaple代码,就是为了尝试这样的事情。好吧,我找不到我的示例,但我找到了一个解释它的网站。
function one(){
  return true;
}
// one() => true;
// Note: We could still change the output without changing the guts.
// !one() => false;
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';
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);
}