Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!


eval динамически создать именованную функцию? С eval это просто.var F = eval("1 && function " + o.type + "(){}");
create Крокфорда. Но если ее использовать так, как есть, то в консоли объекты будут называться «Object». Нам же хотелось бы, чтобы они назывались — «Man», «Woman», «Point» и т.д. С помощью eval этого легко можно достичь. При этом нет ни проблем производительности (так как количество вызовов равно количеству типов), ни проблем безопасности (так как мы контролируем передающийся код).instanceof это большое подспорье.Constructor: 'Name'. Всё-равно имя функции не может содержать, скажем, точку, которая нужна для пространства имён. var F = /** @cut */ new Function('constructor', 'return {"' + o.type + '": ' +
function(){
constructor.apply(this, arguments);
}
/** @cut */ + '}["' + o.type + '"]')(constructor);
debugger;
new F();
[new Man, new Woman];
// так?
[Man, Woman]
// или так?
[Object, Object]
function createEmptyFunction(cefName){
// для браузера:
window[cefName] = function(){}
// или для Node.js:
global[cefName] = function(){}
}
// вызывать как-нибудь так:
createEmptyFunction( o.type );
var F = new Function('constructor', 'return {"' + o.type + '": ' +
function(){
constructor.apply(this, arguments);
}
+ '}["' + o.type + '"]')(constructor);
var Man = create({
type: 'Human.Man',
...
});
var F = new Function('constructor', 'return {"' + o.type + '": ' +
function(){
a.apply(this, arguments);
}
+ '}["' + o.type + '"]')(a);
var F = new Function('constructor_', 'return {"' + o.type + '": ' +
function(){
constructor_.apply(this, arguments);
}
+ '}["' + o.type + '"]')(constructor);
Как вы относитесь к функции eval в JavaScript?