CoffeeScript 为对象(命名类)生成动态变量名称
CoffeeScript generating dynamic variable names for objects (named classes)
我对JavaScript世界很陌生,对CoffeeScript甚至很新。我有一个问题,我不确定是否有可能。
假设我有一个这样的 CoffeeScript 类
class @Model
constructor: (@name) ->
如何将要创建的模型的名称传递给函数以实例化这些对象,同时将变量的名称(在本例中)附加到_model?像这样:
makeModel = (name) ->
"#{name}_model" = new Model(name)
我的rails应用程序告诉我:
unexpected =
"#{name}_model" = new Model(
^
我假设这是因为字符串。有没有某种方法可以将字符串转换为变量名?我快速浏览了一下.eval()
方法,但CoffeeScript的小书警告不要使用它。
谢谢
你可以做这样的事情:
ModelFactory = do ->
class @Model
constructor: (@name) ->
models = {}
makeModel = (name) ->
model = new Model(name)
models["#{name}Model"] = model
model
getModel = (name) ->
models["#{name}Model"] or makeModel(name)
{ getModel }
秘密魔法:
do ->
- do
关键字创建一个 IIFE,该函数在创建后立即调用。它可用于创建如下所示的模块:
var myModule = (function () {
var privateFunc = function () {};
var publicFunc = function () { privateFunc(); };
return {
publicFunc: publicFunc
}
})();
使用字符串访问属性 - 在 JavaScript 中,可以使用方括号 ([]
) 表示法、字符串或包含字符串的变量,以字符串形式访问对象的属性。在这里,我们将它与 CoffeeScript 字符串插值糖 ("#{}"
) 相结合,以动态创建属性名称并分配它们。
var object = {
prop: 'value',
otherProp: 'otherValue'
};
var propertyName = 'prop';
var value = object[propertyName]; // 'value';
var something = 'Something'
object['my' + something] = 'a new property';
object.mySomething === 'a new property'; // true
相关文章:
- 在Javascript中连接一个动态变量名
- 动态变量名语法
- 动态jQuery变量名
- 使用动态变量名更新JSON中的结果
- 在JavaScript中循环使用动态变量名
- jQuery在for循环中动态递增变量名
- Javascript调用函数-动态变量名
- 如何在ExtJS中创建动态数组变量名
- for循环中的动态变量名
- Javascript:动态变量名与php
- 通过动态名称更新本地变量名
- 动态JavaScript变量名
- 如何在循环中创建动态变量名
- JavaScript的动态变量名-两个数组
- 如何动态地以点表示法呈现变量名
- Angular中的动态作用域变量名
- 在javascript中动态声明变量名
- 动态变量名,避免eval()
- 循环中的动态变量名
- Javascript动态变量名从数组值(Appcelerator Titanium)