编辑Javascript函数

时间:2011-07-06 17:44:37

标签: javascript

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

4 个答案:

答案 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函数?”

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