javascript - 为自定义对象声明制作 JavaScript 'equals' 方法原型(prototype)是一种好习惯吗?如果是的话,怎么做?

标签 javascript coding-style

我正在尝试在 javascript 中创建一组可重复使用的对象,但一些托管框架范例(如 .NET)不会直接转换。

例如,没有全局的 getType() 方法或其等效方法,也没有默认的 Object 上的 equals() 原型(prototype)函数,甚至只是做一个基本的引用比较。

因此,如果我打算着手创建对象定义,编写比较函数原型(prototype)的最佳方式是什么?

例如如果我按照下面的路线开始,我是在朝着正确的方向前进,还是在为以后的痛苦做好准备?

编辑:根据评论建议将代码与返回放在同一行

function Car(make, model, colour) {
    this.make = make;
    this.model = model;
    this.colour = colour;
}

Car.prototype.equals = function(otherCar) {
    // Check that 'otherCar' really is a 'Car' ?
    // otherwise the property comparison code below with throw an exception, right?
    // How?


    // I could just use try / catch, but that could be 'expensive'?

    // Property-for-property comparison


    try {

        return this.make === otherCar.make
            && this.model === otherCar.model
            && this.colour === otherCar.colour;

    } catch(err) {

        return false;

    }
}

最佳答案

这里不需要使用try-catch。 return 语句无论如何都不会抛出异常。只需使用

    return otherCar !== null &&
        this.make === otherCar.make
        && this.model === otherCar.model
        && this.colour === otherCar.colour;

它总是会返回一个 bool 值,除非你一开始就没有传递任何东西。但是,如果您希望函数不带任何参数返回 false,请使用

    return typeof otherCar !== 'undefined' &&
        otherCar !== null &&
        this.make === otherCar.make
        && this.model === otherCar.model
        && this.colour === otherCar.colour;

至于总体思路,我觉得还不错,如果你有很多比较的话。这将你限制在严格的框架内,这取决于原因可能是好的,但同时你牺牲了自由。

EDIT try-catch block 已在问题中部分修复。添加了评论中指出的改进。

关于javascript - 为自定义对象声明制作 JavaScript 'equals' 方法原型(prototype)是一种好习惯吗?如果是的话,怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7254908/

相关文章:

java - 在不需要时使用 super 有什么坏处吗?

javascript - 在物理 Android 设备上运行 Meteor 移动应用

javascript - D3.js - 从版本 2 到版本 4 中的 path.area 的变化

javascript - Knockout 可观察对象未观察到其中一项属性

javascript - 如何在 jQuery 数组中找到 indexOf 元素?

javascript - 在 underscore.js 中使用相同的 json 分别构建表标题和数据的最佳方法?

javascript - 我应该将上传功能放在Vue组件中的哪里?

c - 在 C 中,你是否应该始终使用 'int' 作为数字,即使它们是非负数?

javascript - 为什么在 JavaScript 构造函数中使用副作用是不好的做法?

javascript - 没有网络服务器的 Angular 路由来加载模板