实施标准 Javascript 类型

Implementing Standard Javascript Types

伙计们。

我正在研究(卡住的 ES5)企业编译器的实现,我得到了一些不错的实现,例如:

Object.prototype.isString = function () { return typeof this[0] === 'string' }

'asd'.isString (); // True
(123).isString (); // False
new Date ().isString (); // False

Date.prototype.getArray = function () {
    var mm = this.getMonth () + 1;
    var dd = this.getDate ();

    var arr = new Array ();
    arr.push (this.getFullYear ());
    arr.push ((mm > 9 ? '' : '0') + mm);
    arr.push ((dd > 9 ? '' : '0') + dd);

    return arr;
};

var date = new Date ();
date.getArray ()[0]; // 2020 (Year)
date.getArray ()[1]; // 10 (Month)
date.getArray ()[2]; // 21 (Day)

我的问题是:我正在尝试实施 under snnipet,但没有得到相等比较结果。有人成功了吗?

Object.prototype.equals = function (toCompare) { return this === toCompare; }

对于感兴趣的人,我找到了答案on a @Jevgeni Kiski comment, thanks a lot for

Object.prototype.equals = function(x){
    for (var p in this) {
        if(typeof(this[p]) !== typeof(x[p])) return false;
        if((this[p]===null) !== (x[p]===null)) return false;
        switch (typeof(this[p])) {
            case 'undefined':
                if (typeof(x[p]) != 'undefined') return false;
                break;
            case 'object':
                if(this[p]!==null && x[p]!==null && (this[p].constructor.toString() !== x[p].constructor.toString() || !this[p].equals(x[p]))) return false;
                break;
            case 'function':
                if (p != 'equals' && this[p].toString() != x[p].toString()) return false;
                break;
            default:
                if (this[p] !== x[p]) return false;
        }
    }
    return true;
}