在比较 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)继承。
您无法使用共享函数从构造函数内部访问 var
iable,因为它无权访问该闭包。如果您想实现共享功能,您还需要将这些值移动到可引用的空间中,即
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/