私はクラスベースのオブジェクト指向システムを使用するC#/ Javaのバックグラウンドを持っていますが、JavaScript/CoffeeScriptプロトタイプのオブジェクト指向システムをまだ取得していません。以下にCoffeeScriptクラスを作成しました。これにより、システム側の設定に従って連絡先の名前を表示できます。joinNonEmpty(stringList, joinText)
メソッドをプロトタイプに属し、Java / C#ランドで静的メソッドを呼び出す方法で呼び出すことによってのみ、クラスを機能させることができます。
- を使用してこのメソッド呼び出しを行う方法はあり
this.joinNonEmpty(...)
ますか? firstLastRender, lastFirstRender and firstOrNickThenLast
これでコンストラクターのメソッドを参照できる理由を教えてください。joinNonEmpty
しかし、ヘルパーを呼び出すときにそれらのメソッドからは機能しませんか?- これは、設定マップを介して適切なメソッドを見つける方法と関係がありますか?
prefs = displayNameFormat: "FirstOrNickThenLast"
class DisplayNameRenderer
constructor: ->
@prefToRenderMap =
FirstLast: this.firstLastRender
LastFirst: this.lastFirstRender
FirstOrNickThenLast: this.firstOrNickThenLast
# Why does this method have to be static (a class method)?
@joinNonEmpty: (stringList, joinText) ->
nonEmptyStrings = []
for s in stringList
nonEmptyStrings.push(s) if s isnt null and s isnt ""
nonEmptyStrings.join(joinText)
firstLastRender: (contact) ->
# TypeError: Object expected.
joinNonEmpty([contact.firstName, contact.lastName], ' ')
lastFirstRender: (contact) ->
# TypeError: Object doesn't support this method or property
this.joinNonEmpty([contact.lastName, contact.firstName], ', ')
firstOrNickThenLast: (contact) ->
# Works correctly.
DisplayNameRenderer.joinNonEmpty([(if contact.nickname isnt null and contact.nickname isnt "" then contact.nickname else contact.firstName), contact.lastName], ' ')
render: (contact) ->
@prefToRenderMap[prefs.displayNameFormat](contact)
contact = firstName: "Jonathan", nickname: "Jonny", lastName: "Appleseed"
dnr = new DisplayNameRenderer()
# => "Jonny Appleseed"
console.log dnr.render(contact)
お時間を割いていただきありがとうございます。