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

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”。我想在控制台中看到不同的类名。我怎样才能做到这一点?

我试过了


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


附言对不起我的英语不好

最佳答案

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

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


JsFiddle Example

10-07 23:18