JavaScript:比较子实例及其父对象实例是否相等

时间:2014-12-12 22:07:14

标签: javascript inheritance equals

这个问题来自我对当地公司的采访。我相信我的答案是正确的,但面试官说不然。

问题:从Parent对象 Shape 继承,创建一个名为 Circle 的对象,然后判断Circle实例变量是否等于 Parent对象实例。

我回答'不,他们不平等',但采访者说,因为Circle继承自Shape,他们是平等的。那时我很困惑。

我很好奇,只是编写了以下代码进行“平等”比较,似乎我的回答是正确的。以下代码来自我自己:

//Parent Constructor
function Shape() {
  //this.radius = r;
}

//Child Constructor using Shape's constructor  
function Circle() {
  Shape.call(this);
}

Circle.prototype = Object.create(Shape.prototype, {
  constructor: {
    value: Circle,
    enumerable: true,
    configurable: true,
    writable: true
  }
});

var myCircle = new Circle(5);  // Child instance

var myShape = new Shape(5);    // Parent instance

console.log(myShape == myCircle);   // check for equality - result is '**false**'

1 个答案:

答案 0 :(得分:1)

您无法使用==比较不同的对象实例,因为它们在内存中具有不同的地址。这适用于大多数OOP语言。

在Javascript中,它们可以被认为是相同的,因为Shape和Circle显然具有相同的属性。因此深刻的比较将会成真。