Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自生函数?_Javascript - Fatal编程技术网

Javascript 自生函数?

Javascript 自生函数?,javascript,Javascript,这可能吗?如果可能,如何实现?(我还没有找到一种方法让它工作) 期望输出: 原函数 调用foo() 新功能 要提前回答问题,是的,我知道还有其他方法。我只是好奇我是否可以做一些像var bar=newfoo()这样的事情和havefoo()在不使用额外函数的情况下为自身分配一些与时间相关的属性 编辑:对Charmanders问题的回答,以及稍微简化、更实用的应用程序 var node = function(parent) { this = function() {

这可能吗?如果可能,如何实现?(我还没有找到一种方法让它工作)

期望输出:

原函数

调用foo()

新功能

要提前回答问题,是的,我知道还有其他方法。我只是好奇我是否可以做一些像
var bar=newfoo()这样的事情
和have
foo()
在不使用额外函数的情况下为自身分配一些与时间相关的属性

编辑:对Charmanders问题的回答,以及稍微简化、更实用的应用程序

var node = function(parent)
{
    this = function()
    {
        for (i in this)
        {
            // perform actions (which will occasionally include calling i()
        }
    }
    if (parent !== null)
    {
        this.parent = parent;
        // code to determine children
        this.somechild = new node(this);
        this.someotherchild = new node(this);
    }
};
var ancestor = new node(new node(null));

是的,但您不会通过分配给
来执行此操作:

function foo() {
  console.log("original");
  foo = function() {
    console.log("new");
  };
}
所要做的就是为全局符号“foo”指定一个新值,这样新值恰好是一个函数

因此,当您两次调用
foo()
时,它将第一次打印“原件”,之后每次打印“新”


的值通常不是引用它的函数的值;可能是这样,但你必须设置一个有点不寻常的情况。即使是,也不能将新值指定给

是,但不能通过指定给
来执行此操作:

function foo() {
  console.log("original");
  foo = function() {
    console.log("new");
  };
}
所要做的就是为全局符号“foo”指定一个新值,这样新值恰好是一个函数

因此,当您两次调用
foo()
时,它将第一次打印“原件”,之后每次打印“新”


的值通常不是引用它的函数的值;可能是这样,但你必须设置一个有点不寻常的情况。即使是,也不能将新值指定给此

如果要使用此技术,需要直接指定给外部函数变量:

var foo = function() 
{ 
    console.log("Original Function");
    foo = function() 
    {
        console.log("New Function");
    };
};
如果函数不应该知道它存储在何处,以便可以存在函数的多个独立副本,那么您确实希望使用闭包工厂:

function makeReplacingFunction() {
    var fn;

    fn = function() {
        console.log("Original Function");
        fn = function() {
            console.log("New Function");
        };
    };

    return function() { fn(); }
}

var foo = makeReplacingFunction();
foo();
foo();

如果要使用此技术,则需要直接为外部函数变量赋值:

var foo = function() 
{ 
    console.log("Original Function");
    foo = function() 
    {
        console.log("New Function");
    };
};
如果函数不应该知道它存储在何处,以便可以存在函数的多个独立副本,那么您确实希望使用闭包工厂:

function makeReplacingFunction() {
    var fn;

    fn = function() {
        console.log("Original Function");
        fn = function() {
            console.log("New Function");
        };
    };

    return function() { fn(); }
}

var foo = makeReplacingFunction();
foo();
foo();

将新值指定给此将不起作用,但您只需返回一个函数:

var foo = function() { 
    console.log("Original Function");
    return function() {
        console.log("New Function");
    };
};

console.log("Calling foo()");
var f = foo(); /* or even: f = new foo(); */
f();

将新值指定给此将不起作用,但您只需返回一个函数:

var foo = function() { 
    console.log("Original Function");
    return function() {
        console.log("New Function");
    };
};

console.log("Calling foo()");
var f = foo(); /* or even: f = new foo(); */
f();

看起来它可能会破坏原始函数(这可能是个问题,也可能不是问题)?@Mattwipple我的印象是,破坏原始函数正是OP想要的。我可能是错的,但我无法想象还有什么会发生,以提供所描述的预期效果。这看起来可能会破坏原始功能(这可能是个问题,也可能不是问题)?@Mattwipple我的印象是,破坏原始功能正是OP的意图。我可能是错的,但我无法想象还有什么事情能达到所描述的预期效果。你的例子似乎与你的问题关系不大。你能确切地说明你想完成什么,为什么吗?你的例子似乎与你的问题关系不大。你能确切地说明你想完成什么,为什么吗?