Хабр Курсы для всех
РЕКЛАМА
Большая витрина: от крупнейших школ до частных авторов. Сравнивайте по цене, длительности, формату и выбирайте самый подходящий курс!


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?