Вызов конструктора с массивом аргументов
Пытаюсь сгенерировать конструктор, вызывающийся с массивом аргументов. Жаль для конструкторов нет функции, подобной apply. Вот, что получилось:
new (Function.prototype.bind.apply( function(){ console.log(this, arguments) }, [{a:1},2,3,4])); {a: 1}, по идее должен быть контекстом, но в консоли выдаётся пустой объект. В общем, как, имея массив аргументов, вызвать конструктор? |
Мы это в скайпе разве не обсуждали?
|
http://stackoverflow.com/questions/1...-this-possible
Много интересных вариантов, не только первый. Ну и всегда есть кондовый eval, если нужно быстро наговнокодить и не напрягать голову.) |
Цитата:
|
Цитата:
|
Цитата:
var arr = [ 'x', 'y', 'z' ]; var fn = new Function( arr.join(), 'return ' + arr.join( '+' ) ); alert( fn.apply( null, [ 1, 2, 3 ] ) ); |
Цитата:
Цитата:
Function.prototype.applyConstruct = function() { var length = arguments.length, argNames = []; for( var i = 0; i < length; i++ ) { argNames.push( 'arg' + i ); } argNames.join( ',' ); return new Function( argNames, 'return new this( ' + argNames + ' );' ).apply( this, arguments ); } F = function() { this.a = 1; console.log( this, arguments )}; F.applyConstruct( 1,2,3,4,5 ); |
Цитата:
Function.prototype.applyConstruct = function() { var F = function() {} F.prototype = this.prototype; return this.apply( new F, arguments ); } F = function() { this.a = 1; console.log( this, arguments )}; F.applyConstruct( 1,2,3,4,5 );может я что-то не понимаю и тебе что-то надо другое? |
Цитата:
this.apply( new F, arguments );new F запускается без аргументов, что чревато ошибками, если аргументы обязательны. |
Цитата:
|
Часовой пояс GMT +3, время: 16:23. |