0
我使用的是簡單的類機制:如何在JavaScript中的類工廠中設置類的名稱?
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」。我想在控制檯中看到不同的類名。我怎樣才能做到這一點?
我的eval通過新功能
- 試圖(姓名,
function ${name}{ /* code */
) - protoObj.constructor = {名稱:名稱}
- 令O = {}; o [name] = function(){...};讓我們的NewClass = O [名]
- Object.defineProperty(的NewClass, '名',{得到...
- NewClass.name =名稱; //拋出錯誤
PS對不起,我的英語
如果我得到你的問題的權利,這可能是答案http://stackoverflow.com/questions/9803947/create-object-from-string – halfzebra
不,我說的是:http:// ftp。 faiwer.ru/img_28_09_14:58:48_8ef23be22f4.png。我想看到「> A」而不是「NewClass」 – faiwer
不是我說你*應該*使用它,但出於興趣,爲什麼'eval'沒有工作? 'var NewClass = eval(「(function」+ name +「(){})」);'應該可以正常工作。 [實施例](http://jsfiddle.net/n9jjvsnw/)。另外,你在你的例子中傳錯了你的參數 – CodingIntrigue