#javascript #inheritance #coffeescript
#javascript #наследование #coffeescript
Вопрос:
Я только начал изучать CoffeeScript, и я хотел бы знать, какова наилучшая практика для получения статического свойства в классе из дочернего экземпляра.
class Mutant
MutantArray: []
constructor: (@name, @strength = 1, @agility = 1) ->
@MutantArray.push(@name)
attack: (opponent) ->
if opponent in @MutantArray then console.log @name " is attacking " opponent else console.log "No Mutant by the name of '" opponent "' found."
@getMutants: () ->
# IS THIS RIGHT?
console.log @.prototype.MutantArray
Wolverine = new Mutant("Wolverine", 1, 2)
Rogue = new Mutant("Rogue", 5, 6)
Rogue.attack("Wolverine")
Mutant.getMutants()
Я бы хотел, чтобы мой метод getMutants() был статическим (создание экземпляра не требуется) и возвращал список имен мутантов, которые были созданы. @.prototype.Похоже, что MutantArray работает нормально, но есть ли лучший способ сделать это? Я попробовал @MutantArray, но это не сработало.
Спасибо!
Ответ №1:
Я думаю, вам следует определить свой MutantArray как статическое поле. Затем из нестатических методов вы должны ссылаться на него через class, а из статических методов вы получаете к нему доступ через @ . Вот так:
class Mutant
@MutantArray: []
constructor: (@name, @strength = 1, @agility = 1) ->
Mutant.MutantArray.push(@name)
attack: (opponent) ->
if opponent in Mutant.MutantArray then console.log @name " is attacking " opponent else console.log "No Mutant by the name of '" opponent "' found."
@getMutants: () ->
# IS THIS RIGHT?
console.log @MutantArray
Ответ №2:
Я думаю, что это так:
class Mutant
MutantArray: []
constructor: (@name, @strength = 1, @agility = 1) ->
@MutantArray.push(@name)
attack: (opponent) ->
if opponent in @MutantArray then console.log @name " is attacking " opponent else console.log "No Mutant by the name of '" opponent "' found."
getMutants: () ->
# IS THIS RIGHT?
console.log @.MutantArray
Wolverine = new Mutant("Wolverine", 1, 2)
Rogue = new Mutant("Rogue", 5, 6)
Rogue.attack("Wolverine")
Mutant.getMutants()
getMutants должен быть методом-прототипом, и вы извлекаете значение массива с помощью @.getMutants