Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вызов конструктора с массивом аргументов (https://javascript.ru/forum/misc/31244-vyzov-konstruktora-s-massivom-argumentov.html)

FINoM 01.09.2012 01:05

Да, тупанул.

FINoM 01.09.2012 01:07

Хотя нет, стоп, а где ты передаешь массив?
UPD
Вижу, забыл добавит аргумент с массивом аргументов.

FINoM 01.09.2012 01:18

Всё равно твоё решение херовое: возвращается экземпляр левого конструктора.

devote 01.09.2012 01:29

ну да, я немного не дописал:
Function.prototype.applyConstruct = function() {
    var F = function() {}
    F.prototype = this.prototype;
    this.apply( F = new F, arguments );
    return F;
}
 
F = function() { this.a = 1; console.log( this, arguments )};
var a = F.applyConstruct( 1,2,3,4,5 );

alert( a instanceof F );

Gvozd 01.09.2012 04:54

тему не читай
сразу отвечай

Разве не достаточно сделать конструктуру call/apply в контексте свежего чистенького объекта, который он и вернет уже оформив в виде своего объекта?

devote 01.09.2012 05:05

Цитата:

Сообщение от Gvozd
Разве не достаточно сделать конструктуру call/apply в контексте свежего чистенького объекта

ну я ему в скайпе предлагал подобный вариант, но он его решил отвергнуть.

Aetae 01.09.2012 05:56

Цитата:

Сообщение от Gvozd (Сообщение 202199)
тему не читай
сразу отвечай

Разве не достаточно сделать конструктуру call/apply в контексте свежего чистенького объекта, который он и вернет уже оформив в виде своего объекта?

Для этого конструкор должен быть специально подготовлен, с произвольным не пойдёт же.

devote 01.09.2012 06:26

в скайпе ему, я предложил такой вариант:
function Foo( a, b, c ) {
    this.lala1 = a;
    this.lala2 = b;
    this.lala3 = c;
}
var b = Object.create( Foo.prototype );
Foo.apply( b, [ 1, 2, 3 ] );

alert( [ b.lala1 ] );
alert( b instanceof Foo );

Aetae 01.09.2012 06:33

Вообще Object.create как и bind не работают сами-знаете-в-чём.)

Aetae 01.09.2012 09:10

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 202211)
подобные вещи вы можете невозбранно позаимствовать у мастерски созданной каким-то неизвестным гением чудо функции Class

И ТУТ В ТРЕД ВРЫВАЕТСЯ ДЯДЯ ЛЕША:
Function.prototype.create = function ( args ) {
	var Constructor = this;
	function Wrapper() { Constructor.apply( this, args ) }
	Wrapper.prototype = Constructor.prototype;
	return new Wrapper
}


function Cat( a, b ) {
	this.a = a;
	this.b = b;
}

var cat = Cat.create( [1, 2] )

alert( cat.a ) 					 // 1
alert( cat.constructor === Cat ) // true
alert( cat instanceof Cat ) 		// true
alert( cat.__proto__ === Cat.prototype ) // true


ну а совсем для эстетов можно делать обертку так, чтобы имя сохранялось )), так папа раньше делал в функции Class говорят, пока на него не наехали что это мыл долго)
var Wrapper = eval( '(function ' + this.name + '(){Constructor.apply(this,args)})' );



п.с. devote, че за хрень ты создал вообще))))? Я не пони как она работает, а, все пони, ты не дописал оказывается

Код с mdn
Function.prototype.construct = function (aArgs) {
    var fConstructor = this, fNewConstr = function () { fConstructor.apply(this, aArgs); };
    fNewConstr.prototype = fConstructor.prototype;
    return new fNewConstr();
};


Часовой пояс GMT +3, время: 01:12.