复制不带属性的函数引用

Copy a function reference without its properties

本文关键字:函数 引用 属性 复制      更新时间:2023-09-26

这听起来可能很奇怪,但我想复制一个忽略其成员的函数引用
举个例子:

var a, b;
a = function(){ return "foo" };
a.x = "bar";
b = /* some magic here */;
a(); // foo
a.x; // bar
b(); // foo
b.x; // undefined

因此,调用a()b()必须返回"foo",因为它们是同一个函数
调用a.xb.x必须返回不同的结果,因为b没有复制a属性。

有办法这样做吗?

编辑:为了清楚起见,我知道我可以引用整个函数对象,如下所示:

a = function(){ return "foo" };
a.x = "bar";
b = a;
b(); // foo
b.x; // bar

但是,b.x是定义的,等于"bar",这不是我想要的。

根据您的评论:

在这种情况下,您将永远无法拥有a == b。对象相等要求两个变量都包含对精确对象的引用,因此除非设置a = b/b = a,否则它将始终返回false

您可以使用原型创建继承同一函数的独立ab实例。实例也可以有自己的非共享属性。例如:

var a, b;
function zot() {};
zot.prototype.f = function(){ return "foo" };
a = new zot();
a.x = "bar";
b = new zot();
a.f(); // foo
a.x; // bar
b.f(); // foo
b.x; // undefined