Имам код на 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