Javascript 自生函数?
这可能吗?如果可能,如何实现?(我还没有找到一种方法让它工作) 期望输出: 原函数 调用foo() 新功能 要提前回答问题,是的,我知道还有其他方法。我只是好奇我是否可以做一些像Javascript 自生函数?,javascript,Javascript,这可能吗?如果可能,如何实现?(我还没有找到一种方法让它工作) 期望输出: 原函数 调用foo() 新功能 要提前回答问题,是的,我知道还有其他方法。我只是好奇我是否可以做一些像var bar=newfoo()这样的事情和havefoo()在不使用额外函数的情况下为自身分配一些与时间相关的属性 编辑:对Charmanders问题的回答,以及稍微简化、更实用的应用程序 var node = function(parent) { this = function() {
var bar=newfoo()这样的事情
和havefoo()
在不使用额外函数的情况下为自身分配一些与时间相关的属性
编辑:对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的意图。我可能是错的,但我无法想象还有什么事情能达到所描述的预期效果。你的例子似乎与你的问题关系不大。你能确切地说明你想完成什么,为什么吗?你的例子似乎与你的问题关系不大。你能确切地说明你想完成什么,为什么吗?