【发布时间】:2018-04-05 03:00:47
【问题描述】:
我被这个问题困住了。需要检查这2个功能是否相同或引用相同。 所以场景是这样的: fn1 函数是匿名的。
function fnName(args) {
if(this.fn1 === this.json1.fn1)
//this is true
else
//this is false
}
这里 this.fn1 和 this.json1.fn1 都指向同一个函数定义。有没有办法找出它们是否指向相同?
我尝试过使用 function.toString() 但这对任何函数都给出了相同的输出,即;
function() { [native code] }
在此进行比较时,它给出了任何 2 个甚至不相同的函数的输出结果。
比较 === 并没有将它们视为相同。调试时显示它指向同一行的函数。
在做 Object.is(this.fn1,this.json1.fn1); 时返回 false ,这意味着它们不是同一个对象。
如何将这些函数设置为属性是通过使用绑定函数,例如:
fn1 = fn1.bind(this);
json1["fn1"] = fn1.bind(this)
所以现在我们知道这是 2 个不同的对象
【问题讨论】:
-
你想比较整个函数(包括它的名字)还是只比较函数体?或者,您是在谈论比较匿名函数吗?
-
只需使用
===即可查看引用函数(或对象)的两个变量是否引用了内存中的同一位置 -
@epascarello :正如我指出的函数 {[native code]}; 并没有帮助。是我将其转换为字符串时得到的
-
@CertainPerformance :即使它们指向相同的位置然后转到 else case 也不起作用。我猜是因为存储引用的对象是不同的对象。
标签: javascript function compare this