在这种情况下,java脚本中对象方法的比较返回false

in which situation the comparison of objects methods in java script returns false

本文关键字:方法 比较 返回 false 对象 这种情况下 java 脚本      更新时间:2023-09-26

几天前,我看到了一个例子,将对象的实例与返回true或false的方法进行比较,我试着自己做这件事。正如我所解释的,如果我在Object中声明方法,而不是在他的原型中,那么在这个例子中它必须返回false,但我得到了true:

function Foo(name, lastName) {
    this.name = name,
    this.lastName = lastName,
    this.show = function() {
       return this.name;
    }
}
function Foo2(name, lastName) {
    Foo.apply(this, arguments);
}
Foo2.prototype = Foo.prototype;
Foo2.prototype.constructor = Foo2;
var x = new Foo2("Peter", "Pan");
var y = new Foo2("John", "English");
console.log(x.show() === y.show());// true, why not false? it is two differed functions

当我比较它们时,结果是真的,但我不明白为什么?如果我在对象内部声明属性并执行新的object,我会创建两个不同的函数,当我在原型中声明时,它会创建一个相等的函数。

谢谢你的建议。

您调用的是函数并比较它们的返回值,而不是函数本身。要引用函数本身,请使用后面没有()的名称。

var x = new Foo2("Peter", "Pan");
var y = new Foo2("Peter", "English");
console.log(x.show() === y.show()); // true
console.log(x.show === y.show); // false