Я использую простой механизм классов:
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 */ );
Отлично. Но когда я регистрирую объекты в инструментах веб-разработчика, я вижу «> NewClass {…}». Потому что переменная в методе "define" называется "NewClass". Я хочу видеть разные имена классов в консоли. Как я могу это сделать?
я пробовал
- eval по новой функции (имя,
function ${name}{ /* code */
) - protoObj.constructor = {имя: имя}
- пусть о = {}; о[имя] = функция(){...}; пусть NewClass = o[имя]
- Object.defineProperty(NewClass, 'имя', {получить...
- НовыйКласс.имя = имя; // бросаем ошибку
P.S. Извините за мой английский
eval
не сработало?var NewClass = eval("(function " + name + "() {})");
должно работать нормально. Пример. Кроме того, вы неправильно передаете свои параметры в своем примере - person CodingIntrigue   schedule 28.09.2015new Function
вариант. И это не сработало. Вариант сwindow.eval
рабочим. - person faiwer   schedule 28.09.2015this.construct
? Вы имеете в виду Reflect.construct ? - person CodingIntrigue   schedule 28.09.2015