01.09.2012, 01:05
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Да, тупанул.
|
|
01.09.2012, 01:07
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Хотя нет, стоп, а где ты передаешь массив?
UPD
Вижу, забыл добавит аргумент с массивом аргументов.
|
|
01.09.2012, 01:18
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Всё равно твоё решение херовое: возвращается экземпляр левого конструктора.
|
|
01.09.2012, 01:29
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
ну да, я немного не дописал:
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 );
|
|
01.09.2012, 04:54
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
тему не читай
сразу отвечай
Разве не достаточно сделать конструктуру call/apply в контексте свежего чистенького объекта, который он и вернет уже оформив в виде своего объекта?
|
|
01.09.2012, 05:05
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от Gvozd
|
Разве не достаточно сделать конструктуру call/apply в контексте свежего чистенького объекта
|
ну я ему в скайпе предлагал подобный вариант, но он его решил отвергнуть.
|
|
01.09.2012, 05:56
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,585
|
|
Сообщение от Gvozd
|
тему не читай
сразу отвечай
Разве не достаточно сделать конструктуру call/apply в контексте свежего чистенького объекта, который он и вернет уже оформив в виде своего объекта?
|
Для этого конструкор должен быть специально подготовлен, с произвольным не пойдёт же.
__________________
29375, 35
|
|
01.09.2012, 06:26
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
в скайпе ему, я предложил такой вариант:
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 );
|
|
01.09.2012, 06:33
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,585
|
|
Вообще Object.create как и bind не работают сами-знаете-в-чём.)
__________________
29375, 35
|
|
01.09.2012, 09:10
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,585
|
|
Сообщение от Maxmaxmахimus
|
подобные вещи вы можете невозбранно позаимствовать у мастерски созданной каким-то неизвестным гением чудо функции 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();
};
__________________
29375, 35
|
|
|
|