在 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/