Эквивалент Groovy: объектные методы javascript

#grails #groovy

#grails #groovy

Вопрос:

В JavaScript вы можете сделать следующее:

 var obj = {
    property: 1,
    method1: function() {
      //...
    },
    method2: function() {
      //...
    }
  };

obj.method1()
 

Мне интересно, существует ли для этого эквивалент groovy (карта, содержащая метод). Я знаю, что это похоже на класс, но мне не нужен класс ha..

Ответ №1:

Да, вы можете поместить замыкания внутри карты. Но это не способ получить объекты в Groovy. Не существует понятия «это», которое знает о карте.

 def obj = [
  inc: { it   1 }
]

println obj.inc(10)
 

Комментарии:

1. Спасибо, это то, что я искал! Я пробовал различные формы синтаксиса, кроме вашего ответа. Также полезно знать об «этом».

Ответ №2:

Итак, Javascript не является ООП. У них есть ОБЪЕКТЫ, но это все. То, что вы показываете, является ОБЪЕКТОМ.

В Groovy вы можете сделать это с помощью класса, который может создавать экземпляр объекта, а затем вы можете сделать это с объектом. Например, вы можете создать CommandObject (который, вероятно, вам нужен), а затем заполнить свойства, как вы хотите, или заполнить их при создании экземпляра. Например (используя приведенный выше пример):

 def paramsDesc = new ParamsDescriptor()
paramsDesc.paramType = 'paramtype'
paramsDesc.keyType = 'keyType'
paramsDesc.name = 'name'
paramsDesc.idReferences = 'id'
paramsDesc.description = 'desc'
paramsDesc.mockData = 'mock'
paramsDesc.values = []
 

ИЛИ (если вы создаете конструктор) вы можете создать все сразу:

 def paramsDesc = new ParamsDescriptor('paramtype','keyType','name','id','desc','mock',[])
 

CommandObjects могут иметь методы и функции (как указано выше). Но вам просто нужно сначала создать их экземпляр (def paramsDesc = new ParamsDescriptor())

В этом разница между классом и объектом; думайте о классе как о схеме, а об объекте как о том, что создается из схемы.