javascript - 如何使类的属性不区分大小写?

标签 javascript class oop object coffeescript

在 CoffeeScript 中,假设我有以下内容:

class Greeter
    message: ->
        greeting = switch @gender
            when 'male' then 'Sir'
            when 'female' then 'Madame'
            else 'Unknown'

        "Hello #{greeting}!"

greeter = new Greeter
greeter.gender = 'Male'
alert greeter.message()

当我希望它输出 Hello Sir! 时,它当前会提醒 Hello Unknown!

如何使 Greeter 类将 @gender 实例变量小写,从而实现正确的输出?我不想只是在 message 方法中将其小写,而是在类的整个实例中都将其小写。这样它也适用于其他方法。

我想我缺少一些非常基本的东西,但我似乎无法理解它。

注意:对于那些说我把“男性”的大写错误的人。是的,我是故意的。我希望类在所有情况下都自动小写 gender,然后再使用它。因此,用户可能会弄​​错大小写,但它仍然有效。

原因是我最终想将其外推到其他情况,而不仅仅是那些处理不区分大小写问题的情况。

有些人提到了 JavaScript Getters 和 Setters,它们相对较新,因此并非所有主流浏览器都支持。我会看看那些。我通过 Ruby 对它们有些熟悉。

最佳答案

男性 不是男性。尝试将您的字符串标准化为小写:

message: ->
    greeting = switch @gender.toLowerCase()
        when 'male' then 'Sir'
        when 'female' then 'Madame'
        else 'Unknown'

如有必要,您可能希望将对小写字母的调用封装在某些属性 getter 中:https://stackoverflow.com/a/11592890/2363712类似的东西:

class Greeter
    constructor: ->
        Object.defineProperty  @, 'gender',
            get: ->
                return @_gender
            set: (value) ->
                @_gender = value.toLowerCase()

    message: ->
        greeting = switch @gender
            when 'male' then 'Sir'
            when 'female' then 'Madame'
            else 'Unknown'

        "Hello #{greeting}!"

为此,您的运行时环境必须支持 Object.defineProperty
参见that table快速查找支持的浏览器。

关于javascript - 如何使类的属性不区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25045531/

相关文章:

c# - C# 中的方法与属性 - 有什么区别

java - 是否存在可编写 Javascript 的 FTP 上传 Java/Flash Applet?

javascript - 在 MongoDB 中使用嵌入式文档

c++ - 在类方法中修改私有(private)类变量?

java - Java练习中值和引用之间的区别?

java - 函数是否只存在于非面向对象的语言中?

javascript - EaselJS 的碰撞问题

javascript - 如何使用 DOM 通过其中的数据查找 XML 元素?

c# - 为什么 C# 不支持变体泛型类?

java - 类和对象的概念