如何在 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 名称。我该怎么做?
我试过了
- 通过新函数求值(名称,
function ${name}{ /* code */
)
- protoObj.constructor = {姓名:姓名}
- 令 o = {}; o[名称] = 函数(){...};让 NewClass = o[名称]
- Object.defineProperty(NewClass, 'name', { get...
- NewClass.name = 姓名; // 抛出错误
P.S。对不起我的英语
您可以使用函数构造函数创建一个新对象并为其命名:
var NewClass = new Function(
"return function " + name + "(){ }"
)();
我正在使用简单的 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 名称。我该怎么做?
我试过了
- 通过新函数求值(名称,
function ${name}{ /* code */
) - protoObj.constructor = {姓名:姓名}
- 令 o = {}; o[名称] = 函数(){...};让 NewClass = o[名称]
- Object.defineProperty(NewClass, 'name', { get...
- NewClass.name = 姓名; // 抛出错误
P.S。对不起我的英语
您可以使用函数构造函数创建一个新对象并为其命名:
var NewClass = new Function(
"return function " + name + "(){ }"
)();