У меня есть код CoffeeScript, который является кодом драйвера для neo4j. В том, что у него есть класс PropertyContainer
, который имеет две функции get
и set
, которые перечислены как языковые помощники. а ниже находятся self
и data
, которые в основном являются прототипами свойств этого объекта. к ним можно получить доступ как a.self
и a.data
.
Чего я не понимаю, так это почему перед ними стоит get
и set
в следующем коде. get
и set
здесь четко определяют, считывается или записывается свойство, но как оно работает. В CoffeeScript вы определяете прототипические свойства как s prop_name: -> somecode
, но если вы поместите get prop_name: -> somecode
, не должно ли это изменить имя свойства на то, что возвращается после get prop_name
. Я очень новичок в CoffeeScript, поэтому, возможно, я что-то упускаю. Пожалуйста помоги.
class PropertyContainer
#
# Construct a new wrapper around a Neo4j property container with the given
# data directly from the server at the given Neo4j {GraphDatabase}.
#
# @private
# @param db {GraphDatbase}
# @param data {Object}
#
constructor: (db, data) ->
@db = db
@_request = db._request # convenience alias
@_data = data or {}
@_data.self = data?.self or null
### Language helpers: ###
get = (props) =>
@::__defineGetter__ name, getter for name, getter of props
set = (props) =>
@::__defineSetter__ name, setter for name, setter of props
### Properties: ###
#
# @property {String} The URL of this property container.
#
# @todo This might be an implementation detail; should we remove it?
# If not, should it at least be renamed to just URL?
#
get self: -> @_data.self or null
#
# @property {Object} This property container's properties. This is a map
# of key-value pairs.
#
get data: -> @_data.data or null
set data: (value) -> @_data.data = value
На самом деле это драйвер для Neo4j на основе REST API. Я не думаю, что это имеет какое-либо отношение к методу GET HTTP. Я проверил __defineGetter__
и __defineSetter__
, их больше нигде нельзя увидеть во всей библиотеке, за исключением случаев, когда они используются аналогичным образом для других классов. Возможно, это какие-то внутренние прототипы прототипов CoffeeScript. Было бы здорово, если бы кто-нибудь мог пролить свет на это. Спасибо еще раз.
__defineGetter__
и__defineSetter__
ссылка кажется, я понял ту часть, чтоget
иset
— это просто вызовы функций для привязки свойствself
иdata
к функциям, которые передаются в качестве аргумента значения ключа функциямget
иset
. - person vinit   schedule 26.12.2013