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

时间:2014-08-28 20:58:27

标签: javascript

前几天我看到一个例子比较对象的实例和他们返回true或false的方法,我试着通过我自己来做这个。正如我向我解释的那样,如果我在Object中声明方法,而不是在他的原型中,在这个例子中它必须返回false,但我得到了真实:

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,我创建了两个不同的函数,当我在原型中声明时,它创建了一个相等的函数。

感谢任何建议。

1 个答案:

答案 0 :(得分:1)

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

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