[更新]我的问题可能不够清楚......进一步澄清我想要完成的事情:
我检索这样的对象:
p =
name:
first: 'alan'
last: 'smith'
并希望创建一个结构(一个类,多个类?)最终能够编写这样的东西:
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()}"
感谢您的反馈意见。