0

这可能吗?如果可以,怎么办?(我还没有找到让它工作的方法)

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

期望的输出:

原始功能

调用 foo()

新功能

要提前回答问题,是的,我知道还有其他方法可以做到这一点。我只是好奇我是否可以做类似的事情var bar = new foo();并在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));
4

3 回答 3

2

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

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();
于 2012-10-06T19:48:06.510 回答
2

分配一个新值this将不起作用,但您可以简单地返回一个函数:

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();
于 2012-10-06T19:48:42.543 回答
0

是的,但你不能通过分配来做到这一点this

function foo() {
  console.log("original");
  foo = function() {
    console.log("new");
  };
}

所做的只是为全局符号“foo”分配一个新值,这样新值恰好是一个函数。

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

的值this通常不是引用它的函数的值;可以,但是必须设置一个有点不寻常的情况。即使是这样,您也不能为this.

于 2012-10-06T19:45:43.220 回答