gpt4 book ai didi

javascript - 比较 JavaScript 中的 2 个函数

转载 作者:行者123 更新时间:2023-11-29 18:16:21 25 4
gpt4 key购买 nike

在比较 Javascript 中的函数时,我认为它比较定义函数的内存以交叉检查给定的 2 个函数是否相等。
因此,试图通过从同一对象的 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)继承。

您无法从具有共享函数的 Constructor 内部访问 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com