JavaScript获取函数值

JavaScript获取函数值,javascript,function,Javascript,Function,我正在尝试重写Node.js require函数。 但是,在JavaScript中,函数可以具有值和属性 假设代码是这样的 a = function() {}; a.someParam1 = 1; a.someParam2 = 2; 如果我把它记录下来。它看起来像: { [Function] someParam1: 1, someParam2: 2 } 我知道我可以通过简单的操作调用这个函数 a() 但是,如果我想在不删除属性的情况下覆盖它的行为呢 做 a = function(){ co

我正在尝试重写Node.js require函数。 但是,在JavaScript中,函数可以具有值和属性

假设代码是这样的

a = function() {};
a.someParam1 = 1;
a.someParam2 = 2;
如果我把它记录下来。它看起来像:

{ [Function] someParam1: 1, someParam2: 2 }
我知道我可以通过简单的操作调用这个函数

a()
但是,如果我想在不删除属性的情况下覆盖它的行为呢

a = function(){ console.log("Some other function")}
console.log(a.someParam1)
将产生未定义的结果


如何在不接触函数参数的情况下重写函数值?

您可以继承,但不建议这样做。(但既然你想做的事情一开始就不被推荐,你不妨试一试。)

a = (function(previously) {
  var newImplementation = function() {
    // new implementation
  }
  for (var x in previously) {
     newImplementation[x] = previously[x];
  }
  return newImplementation;
})(a);
*警告:使用以下任一方法对对象的[[Prototype]]进行变异 方法或不推荐使用的对象。prototype.\uuuuu proto\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 不鼓励,因为在现代JavaScript实现中,它非常慢,并且不可避免地会减慢后续执行。


函数对象就是函数。函数不是抽象对象的某种属性,其“值”(函数)可以被重写。不能重写函数的值,正如不能用数字2重写数字1一样

您可以将属性作为对象附加到函数,但函数就是函数,不能从其自身下面进行更改

我不知道在什么环境下,
console.log
会打印出
{[Function]someParam1:1,someParam2:2}
。当然,在我熟悉的任何环境中都不会
console.log
在一个函数上,无论有没有相关属性,都会打印出该函数

> a = function() {};
> a.someParam1 = 1;
> a.someParam2 = 2;

> console.log(a)
function () {} 

如果您想将属性移动到另一个函数上,可以随意使用
对象.assign(function newFunc(){},oldFunc)
.extend
或任何您喜欢的方法。

重写
require()
不是一个好主意。你想做什么?console.log中缺少一个括号(“其他函数”
…但我想那只是一个输入错误…;)@webeno是的。但是谢谢。这是一个有点绕。没有任何属性可以只给我值吗?没有。JavaScript函数是对象。当你替换一个对象的值时,你没有“覆盖”任何东西;您正在将一个对象引用替换为另一个对象引用。因此,如果希望第二个引用具有第一个引用的属性,则必须复制它们。它目前仅为FF,但很高兴知道它即将推出:)也可在traceur中获得。
> a = function() {};
> a.someParam1 = 1;
> a.someParam2 = 2;

> console.log(a)
function () {}