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

JavaScript:比较子实例及其父对象实例是否相等,javascript,inheritance,equals,Javascript,Inheritance,Equals,这个问题来自我对当地一家公司的采访。我相信我的回答是正确的,但面试官说的不是这样 问题:继承父对象形状,创建一个名为圆的对象,然后判断圆实例变量是否等于父对象实例 我的回答是“不,他们不平等”,但面试官说,因为圆是从形状继承而来的,所以他们是平等的。当时我很困惑 我很好奇,只是写了下面的代码进行“相等”比较,我的答案似乎是正确的。下面的代码来自我自己: //Parent Constructor function Shape() { //this.radius = r; } //Child

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

问题:继承父对象形状,创建一个名为的对象,然后判断圆实例变量是否等于父对象实例

我的回答是“不,他们不平等”,但面试官说,因为圆是从形状继承而来的,所以他们是平等的。当时我很困惑

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

//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**'

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


在Javascript中,它们可以被认为是相等的,因为形状和圆显然具有相同的属性。因此,深度比较将返回true。

如何进行深度比较?远比简单的
==
复杂。看见