С помощью someAPI в нем требуются учетные данные, которые я хотел бы назначить динамически в конструкторе. Затем я хотел бы использовать someAPI во всем классе. То есть в следующем примере someMethodUsingSomeAPI - вспомогательный метод, который я хотел бы вызвать из других методов в экземпляре B. Возможно ли это с Coffee/JavaScript? (Единственный способ, которым я могу заставить его работать, если я ставлю someMethodUsingSomeAPI внутри конструктора.)Объект класса, созданный из конструктора
SomeAPI = Npm.require 'someAPI'
class B extends A
constructor: (options = {}) ->
unless @ instanceof B
return new B(options)
@config = JSON.parse(Assets.getText('config/' + options.username + '.json'))
@someAPI = new SomeAPI
consumer_key: @config.credentials.consumer.key
consumer_secret: @config.credentials.consumer.secret
access_token: @config.credentials.access.token
access_token_secret: @config.credentials.access.secret
someMethodUsingSomeAPI = Async.wrap((id, callback) ->
return @someAPI.get 'whatever/show', { 'id': id }, callback
)
console.log someMethodUsingSomeAPI '123' # Error: Cannot call method 'get' of undefined
Обновлен с предложением от saimeunt
...
someMethodUsingSomeAPI = (id) ->
wrappedGet = Async.wrap(@someAPI, 'get')
wrappedGet 'whatever/show', { id: id }
console.log someMethodUsingSomeAPI '123' # ReferenceError: someMethodUsingSomeAPI is not defined
&
b = B('username')
b.someMethodUsingSomeAPI '123' # Works!
изменяющегося someMethodUsingSomeAPI:
к someMethodUsingSomeAPI =
&
b = B('username')
b.someMethodUsingSomeAPI '123' # TypeError: Object #<B> has no method 'someMethodUsingSomeAPI'
(Это с Метеор 0.9.3.1)
UPDATE в попытке ПРОЯСНИТЬ
Here's a simplified version of the above, without any of the API stuff.
someMethod = works, someMethod: doesn't work
Я рад, что classInstance.someMethod работает при использовании:, но ДЕЙСТВИТЕЛЬНО хотел бы, чтобы он работал в реальном экземпляре.
Зачем вам статическую переменную 'someAPI' за пределами вашего класса вместо свойства * экземпляра *? – Bergi
Обратите внимание, что 'JSON.parse' принимает строку JSON, а не путь к файлу. – Bergi
Да, извините. Просто удалил некоторые из них для краткости. Добавлено обратно. – jiku