【发布时间】:2016-07-12 22:09:38
【问题描述】:
我正在将函数从一个对象复制到另一个对象。问题是,虽然它们在源对象中是匿名的,但它们在目标对象中有一个名称:
var o1 = {
a: function() {
alert("Hello World");
},
b: 123,
c: "Some string"
}
var o2 = {};
for (var key in o1) {
if ("function" == typeof o1[key]) {
o2[key] = o1[key];
}
}
console.log(o2.a); //output: function o1.a()
这两个功能似乎并没有以某种方式联系起来,但这至少很烦人。此外,如果我在控制台中登录并单击名称,Firefox 开发者版就会知道该函数的来源。而且我不知道这是否会以某种方式产生其他不良影响。
所以,如果可以复制一个函数并使其保持匿名,那就太好了!
【问题讨论】:
-
这在函数内部更进一步。比如说,上面的这段代码被包裹在一个函数
foo中,那么控制台输出就是function foo/o1.a()。 -
我刚刚在 Chrome 和 Firefox 中进行了测试。当您将其放在另一个对象中时,这两个版本都不会向该函数添加名称。它总是知道源函数在哪里,因为你不是在复制它,而是在创建一个引用。无论如何,您为什么要保持匿名?
-
引用复制...
-
@epascarello 如果你想学究气 ;) 关键是它们指的是相同的确切功能。
-
您将删除
o1.as 对函数的引用,而不是函数本身。您可以使用o1.a === o2.a // => true测试它们是否具有相同的功能。
标签: javascript function object reference copy