gpt4 book ai didi

javascript - CoffeeScript 为对象(命名类)生成动态变量名称

转载 作者:行者123 更新时间:2023-11-29 14:52:43 28 4
gpt4 key购买 nike

我是 JavaScript 世界的新手,甚至是 CoffeeScript 的新手。我有一个问题,我不确定这是否可能。

假设我有一个这样的 CoffeeScript 类

class @Model
constructor: (@name) ->

我如何将要创建的模型的名称传递给函数以实例化这些对象,同时将变量的名称 [在本例中] 附加到 _model?像这样的东西:

makeModel = (name) ->
"#{name}_model" = new Model(name)

我的 Rails 应用程序告诉我:

unexpected =
"#{name}_model" = new Model(
^

我假设这是因为字符串。是否有某种方法可以将字符串转换为变量名?我快速浏览了 .eval() 方法,但是 the little book of 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 }

secret 魔法:

do -> - do 关键字创建一个 IIFE ,一个在创建后立即调用的函数。它可用于创建如下模块:

var myModule = (function () {
var privateFunc = function () {};
var publicFunc = function () { privateFunc(); };
return {
publicFunc: publicFunc
}
})();

使用字符串访问属性 - 在 JavaScript 中,您可以使用 square-bracket ([]) notation 以字符串形式访问对象的属性。 , 加上一个字符串,或者一个包含字符串的变量。在这里,我们将其与 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 - CoffeeScript 为对象(命名类)生成动态变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22942765/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com