如何在 JavaScript 中的 class-factory 中设置 class 的名称?

How to set name of class in the class-factory in JavaScript?

我正在使用简单的 class-机制:

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 Developer Tools 中记录对象时,我看到“> NewClass {…}”。因为方法 "define" 中的变量调用了 "NewClass"。我想在控制台中看到不同的 class 名称。我该怎么做?

我试过了

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

P.S。对不起我的英语

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

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

JsFiddle Example