这实际上取决于“如何使比较 a == b 为真?”的意思。
如果允许您更改构造函数,那么您可以使构造函数成为单例:
function F(){
if (!F.instance) {
F.instance = this;
} else {
return F.instance;
}
};
var a = new F();
var b = new F();
if (a === b) {
//they are the same
}
如果他们希望您保持一切不变,但进行比较,其中包含a == b
那么你可以写以下内容:
if ("" + a == b) {
}
如果他们想知道确定两个对象是否是同一构造函数的实例的方法,那么您可以比较constructor
财产或__proto__
财产:
if (a.constructor === b.constructor) {
}
if (a.__proto__ === b.__proto__) {
}
如果他们想知道这两个对象是否具有相同的属性,您可以比较它们的 JSON 字符串:
if (JSON.stringify(a) === JSON.stringify(b)) {
}
或者您编写一个函数来递归比较两个对象中的所有属性(深度比较)。
对于“如何使比较 a == b 为真?”这个问题最简单的答案:
var a = new F();
var b = new F();
b = a;
if (a === b) {
//surprise!!!
}