【问题标题】:How to set name of class in the class-factory in JavaScript?如何在 JavaScript 中的类工厂中设置类的名称?
【发布时间】:2015-09-28 08:39:08
【问题描述】:

我正在使用简单的类机制:

function define(SuperClass, name, proto)
{
    let ProtoFn = function(){};
    ProtoFn.prototype = SuperClass.prototype;
    let protoObj = new ProtoFn;

    var NewClass = function()
    {
        this.construct.apply(this, arguments);
    };
    _.extend(protoObj, proto,
        {
            constructor: NewClass,
            _class: NewClass,
            _parent: SuperClass
        });
    NewClass.prototype = protoObj;
    NewClass.className = name;
    NewClass.define = define.bind(null, NewClass);

    return NewClass;
}

使用:

let UserModel = Model.define('UserModel', { /* UserModel proto */ });
let john = new UserModel( /* blabla */ );

好的。但是,当我在 Web 开发人员工具中记录对象时,我看到 "> NewClass {…}"。因为方法“define”中的变量称为“NewClass”。我想在控制台中看到不同的类名。我该怎么做?

我试过了

  1. 通过新函数评估(名称,function ${name}{ /* code */
  2. protoObj.constructor = {name: name}
  3. 让 o = {}; o[名称] = 函数(){...};让 NewClass = o[名称]
  4. Object.defineProperty(NewClass, 'name', { get...
  5. NewClass.name = 名称; // 抛出错误

附:对不起我的英语

【问题讨论】:

标签: javascript class native-code


【解决方案1】:

您可以使用 Function 构造函数创建一个新对象并为其命名:

var NewClass = new Function(
     "return function " + name + "(){ }"
)();

JsFiddle Example

【讨论】:

  • 好。你的权利,我以前使用过错误的参数。可能存在没有 eval 的变体?用于生产?
猜你喜欢
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
相关资源
最近更新 更多