这个问题来自我对当地公司的采访。我相信我的答案是正确的,但面试官说不然。
问题:从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**'
答案 0 :(得分:1)
您无法使用==
比较不同的对象实例,因为它们在内存中具有不同的地址。这适用于大多数OOP语言。
在Javascript中,它们可以被认为是相同的,因为Shape和Circle显然具有相同的属性。因此深刻的比较将会成真。