javascript - 比较 JavaScript 中的 2 个函数

标签 javascript function

在比较 Javascript 中的函数时,我认为它会比较定义函数的内存,以交叉检查给定的 2 个函数是否相等。
因此,尝试通过从同一对象的两个不同实例访问成员函数来比较它,如下所示:

function testFn(name) {
    var name = name;
    var self = this;
    self.compareFn = function() {
        console.info(name);
    }    
}

var fn1 = new testFn('fn1');
var fn2 = new testFn('fn2');
console.info(fn1.compareFn == fn2.compareFn);  //Returns false

已经定义了一个带有一个成员函数(“compareFn”)的对象 testFn 并创建了它的 2 个实例(fn1,fn2),但是在比较“fn1.compareFn == fn2.compareFn”时,它失败了。

请记住,该成员函数在多个实例之间共享,并且只有局部变量会单独分配。
请说明此比较失败的原因。

最佳答案

这会失败,因为每次执行new testFn时,它都会生成一个新的compareFn;您没有指向构造函数外部的引用或从原型(prototype)继承。

您无法使用共享函数从构造函数内部访问 variable,因为它无权访问该闭包。如果您想实现共享功能,您还需要将这些值移动到可引用的空间中,即

function testFn(name) {
    var vars = {}; // using object because javascript passes refs for objects
    this.vars = vars; // make `this.vars` point to `vars`
    vars.name = name; // set whatever on your object
}
testFn.prototype.compareFn = function () {
    console.info(this.vars.name); // can access `vars` through ref of `this.vars`
};

现在

var a = new testFn('foo'), b = new testFn('bar');
a.compareFn === b.compareFn; // true;
a.compareFn(); // logs "foo"

关于javascript - 比较 JavaScript 中的 2 个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22994247/

相关文章:

javascript - redux:使用不可变方法修改数组中对象的属性的性能。优点和缺点

javascript - 在 JavaScript 中格式化路径字符串

Javascript 返回函数发生得太晚了

php - PHP中的动态静态方法调用?

c++ - 指针/动态内存分配函数错误(Xcode 到 Linux)

javascript - 如何在 JavaScript 中定义日期对象?

使用 slider 更改 Javascript 图像

excel - 将两列中的值相乘,然后将所有行的结果相加?

javascript - 如何让我的导航栏在滚动时变成半透明?

python - 让函数相互交互的正确方法