[更新]私の質問は十分に明確ではないかもしれません...私が達成したいことのさらなる明確化:
次のようなオブジェクトを取得します。
p =
name:
first: 'alan'
last: 'smith'
そして、最終的にこのようなものを書くことができるように構造(1つのクラス、複数のクラス?)を作成したい:
person.name # alan smith
person.name.toCap() #Alan Smith
person.name.first # alan
person.name.first.toCap() # Alan
person.name.last # smith
person.name.last.toCap() # Smith
...
それで :
- person.nameとperson.name.firstの両方を持つ方法はありますか?
- Stringのようなネイティブタイプを拡張するよりも、メソッドを使用してオブジェクトプロパティを拡張するより良い方法はありますか?
[オリジナル]
コーヒーでこれを行う正しい方法を探しています:
console.log person.name.last #smith
console.log person.name.last.capitalize() # SMITH
console.log person.name.last.initial() # S
私は次の解決策を考え出しましたが、これが進むべき道であることを確認したいと思います...
String::toCap = (remainingToLower=false) ->
@[0].toUpperCase() + if remainingToLower then @[1..-1].toLowerCase()
else @[1..-1]
Number::random = (percent) ->
offset = @ * percent / 100
parseInt(Math.floor(Math.random() * 2 * offset) + @ - offset)
class Name
constructor: (@first, @last) ->
class Person
constructor: (@name, @age) ->
toString: () => "#{@name.first.toCap(true)} #{@name.last.toCap(true)}
(#{@age.random(25)})"
# GO --------------------------->
p = new Person(new Name, 18)
p.name.first = 'alaN'
p.name.last = 'smith'
console.log "#{p.toString()}"
ご意見をいただきありがとうございます。