这是可能的,如果是这样的话怎么样? (我一直无法找到工作方式)
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));
答案 0 :(得分: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();
答案 1 :(得分: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();
答案 2 :(得分:0)
是的,但是你没有通过分配到this
:
function foo() {
console.log("original");
foo = function() {
console.log("new");
};
}
所有这一切都是为全局符号“foo”分配一个新值,以便新值恰好是一个函数。
因此,当您拨打foo()
两次时,它会在第一次打印“原始”,之后每次打印“新”。
this
的值通常不是引用它的函数的值; 可以,但你必须设置一个有点不寻常的情况。即使它是,您也无法为this
分配新值。