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。如何进行深度比较?远比简单的
==
复杂。看见