- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个CoffeeScript代码,它是neo4j的驱动程序代码。因为它有一个类 PropertyContainer
,它有两个函数 get
和 set
,它们被列为语言助手。下面是 self
和 data
,它们基本上是该对象的原型(prototype)属性。这些可以像 a.self
和 a.data
一样访问。
我不明白的是为什么在下面的代码中,它们之前是 get
和 set
。 get
和 set
清楚地标识了该属性正在被读取或写入,但它是如何工作的。在 CoffeeScript 中,您将原型(prototype)属性定义为 prop_name: -> somecode
但如果您输入 get prop_name: -> somecode
,这不应该将属性名称更改为以下内容:在获取 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
这实际上是一个基于 REST API 的 Neo4j 驱动程序。我认为这与HTTP的GET方法没有任何关系。我已经检查了 __defineGetter__
和 __defineSetter__
,这些在整个库中都看不到,除非以类似的方式用于其他类。这些可能是一些 CoffeeScript 内部原型(prototype)原型(prototype)。如果有人能阐明这一点,我会很高兴。再次感谢。
最佳答案
CoffeeScript 类是一个函数定义,上面有一堆类似类的东西。这意味着您可以将任何您想要的代码放入类中。因此,如果我们看一下:
class C
f = -> #...
f(6)
然后我们有一个私有(private)函数,f
,以及一个简单的函数调用 f(6)
.
现在如果我们添加 =>
混合中:
class C
f = => #...
然后f
绑定(bind)到该类,以便 @
里面f
将是C
本身。
现在我们可以将其应用到相关类中:
class PropertyContainer
#...
get = (props) =>
@::__defineGetter__ name, getter for name, getter of props
set = (props) =>
@::__defineSetter__ name, setter for name, setter of props
get self: -> @_data.self or null
所以我们有两个函数,get
和set
,其中有大量 PropertyContainer
这样@
里面get
和set
是 PropertyContainer
。然后我们调用get
函数并添加一些括号和大括号以突出显示结构:
get({ self: (-> @_data.self or null ) })
我们应该开始看看发生了什么。 get self ...
只需调用 get
带有对象参数的函数,该对象有一个键( self
),其值是一个函数。
这使得整个get self ...
调用如下所示:
PropertyContainer::__defineGetter__('self', -> @_data.self or null)
然后如果我们看看 __defineGetter__
是:
// Non-standard and deprecated way
var o = {};
o.__defineGetter__("gimmeFive", function() { return 5; });
console.log(o.gimmeFive); // 5
我们看到我们刚刚设置 o.self
作为 o._data.self
的访问器别名这样:
o = new PropertyContainer(...)
o.self
实际上与:
相同o = new PropertyContainer(...)
o._data.self
或者更一般地说,get
function 允许您向函数发送简单的属性访问。您还应该注意 MDN 页面中的“符合标准”示例:
// Using the get operator
var o = { get gimmeFive() {return 5}};
console.log(o.gimmeFive); // 5
现在我们看到 get
里面PropertyContainer
正在模拟 JavaScript 的 get
operator使用非标__defineGetter__
功能。
set
里面的功能PropertyContainer
类似地模拟 JavaScript 的 set
operator .
关于javascript - 在 CoffeeScript 中使用语言助手来分配原型(prototype)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20789308/
有时我需要(为了让我的开发更快)在我的代码中对一些东西进行硬编码。这可能是凭据,或者可能只是一个允许我测试某些功能的 hack。由于很多原因,我从来不想将这段代码推送到主代码库甚至开发分支。一段时间以
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我经常发现自己从类中提取常见行为到只包含一组静态方法的帮助程序/实用程序类中。我经常想知道是否应该将这些类声明为抽象类,因为我真的想不出实例化这些类的正当理由? 将这样的类声明为抽象类的优点和缺点是什
如果我这样做: $obj = factory(Object::class)->make(); collect($obj); 我返回了一个类型的集合: Illuminate\Support\Collec
我有一个应用程序,我可以在其中列出 parent 和 child 。当我添加一个 child 时,我需要获得一个 parent 列表作为下拉列表显示。有没有类似 collection_select 的
我有渲染组件( source ),用于从 Controller 字段渲染组件/助手。它适用于 ember 1.9.1,但在更新到 ember 1.12.1 后,我发现 API 发生了变化。之后upda
我刚开始使用 Rails,还有很多东西需要学习,所以我可能会比平常更频繁地在 Stackoverflow 上询问初学者 Rails/Ruby 问题。 我只是想弄清楚 Helpers 在 Rails 中
我在 Web 上使用 VS Express 2012。我的项目是一个 MVC 4 项目。 我正在尝试创建一个助手来创建一个菜单项,该菜单项是带有标签的 png 图像。我几乎剪切并粘贴了这段代码: Ac
我正在尝试在我的 Vue 页面中映射我商店的状态变量: export default { data: () => ({ localData: []
我目前正在开发一个 Rails 插件,用于生成 iPhone 特定的 HTML 元标记。我尝试使用 ActionView::TestCase 进行单元测试,但不断收到相同的错误。请参阅下面的文件内容和
我正在努力解决一个与变量声明相关的非常基本的问题。我已经阅读了有关变量的所有内容,但我不知道我的问题是否与 1) 我如何声明变量或 2) 我如何设置变量的范围有关。 首先,我对 Meteor 中变量的
我想知道是否可以将参数传递给 Meteor Helper 并在 HTML 中插入返回对象的属性,而不仅仅是返回最终值。我有这样的东西: HTML: {{#each conversation}}
我正在尝试为我的 Ember 应用程序构建一个新的条件助手。值得一提的是,我正在使用使用 Handlebars 2.0 的 Ember 1.10.1,并且我无法升级它,如果能很好地解决这个版本的 Em
我最近从 Dreamweaver 迁移到 aptana,并尝试使 aptana 尽可能相似;) 已经做了很多更改,但我仍然找不到使代码字体变小的方法(在 Dreamweaver 中代码更清晰,因为字体
我有以下模板: {{#each helperOne "1" "2" }} Lorem upsom {{#each}} helper : template.tempName.h
我有这个简单的代码块,它位于我的一个模板上,但我想将其作为助手放置,以便我的所有 View 都可以访问它。 @hidden(field: Field) = { @defining(field)
使用正则表达式,我正在替换 **text in bold**至 text in bold在一个字符串中,然后显示 message使用 {{{message}}}在我的 EmberJS 模板上。问题是我
是否有任何非常有用和健壮的 C++ 网络库?和库来帮助他们更好地运行?诸如使用 << 时自动进行字节序转换之类的东西,阻止读取直到结构或 w/e 您的读取完全传输,有助于调试协议(protocol)的
模板 {{#each tags}} {{#isObject this}} Object {{else}}
我有返回 JSON 的函数: Template.mainmenu.menuitem = function() { var jsonObj = { items: [ { ur
我是一名优秀的程序员,十分优秀!