Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.08.2012, 08:47
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Вызов конструктора с массивом аргументов
Пытаюсь сгенерировать конструктор, вызывающийся с массивом аргументов. Жаль для конструкторов нет функции, подобной apply. Вот, что получилось:

new (Function.prototype.bind.apply( function(){
console.log(this, arguments)
}, [{a:1},2,3,4]));


{a: 1}, по идее должен быть контекстом, но в консоли выдаётся пустой объект. В общем, как, имея массив аргументов, вызвать конструктор?
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #2 (permalink)  
Старый 31.08.2012, 09:23
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Мы это в скайпе разве не обсуждали?
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 31.08.2012, 09:52
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

http://stackoverflow.com/questions/1...-this-possible
Много интересных вариантов, не только первый.

Ну и всегда есть кондовый eval, если нужно быстро наговнокодить и не напрягать голову.)
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 31.08.2012, 12:53
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от FINoM
{a: 1}, по идее должен быть контекстом
вроде бы контекст для конструктора Function указать нельзя...
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 31.08.2012, 13:00
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Сообщение от nerv_ Посмотреть сообщение
вроде бы контекст для конструктора Function указать нельзя...
Ещёбы. Этож бред. Просто вдумайтесь. Сам смысл new теряется.
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 31.08.2012, 13:04
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от FINoM
В общем, как, имея массив аргументов, вызвать конструктор?
создать функцию и передать массив аргументов ) Или Я не догоняю?
var arr = [ 'x', 'y', 'z' ];
var fn = new Function( arr.join(), 
                       'return ' + arr.join( '+' ) );

alert( fn.apply( null, [ 1, 2, 3 ] ) );
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #7 (permalink)  
Старый 01.09.2012, 00:04
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от devote
Мы это в скайпе разве не обсуждали?
Нет, решение не подошло.
Сообщение от nerv_
создать функцию и передать массив аргументов ) Или Я не догоняю?
Во, сделал:
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 );
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #8 (permalink)  
Старый 01.09.2012, 00:52
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от FINoM
Во, сделал:
хм а чем не годится такой вариант:
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 );
может я что-то не понимаю и тебе что-то надо другое?
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #9 (permalink)  
Старый 01.09.2012, 00:58
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от FINoM
может я что-то не понимаю и тебе что-то надо другое?
Не хочу лишний раз вызывать конструктор с new.
this.apply( new F, arguments );
new F запускается без аргументов, что чревато ошибками, если аргументы обязательны.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #10 (permalink)  
Старый 01.09.2012, 01:02
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от FINoM
new F запускается без аргументов, что чревато ошибками, если аргументы обязательны.
да где??? Я же создал функцию обертку, она всегда будет без аргументов... Что-то ты либо совсем не спишь, либо просто тупишь... Я же не вызываю оригинал через new, а вызываю пустую функцию, с прототипами оригинала.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двойной вызов функции Tmin10 jQuery 8 08.12.2011 15:19
Вызов стандартного конструктора без "new" Riim Общие вопросы Javascript 12 29.05.2011 13:21
Вызов функции с неопределенным количеством аргументов DreamTheater Общие вопросы Javascript 5 22.05.2011 19:35
Явный вызов конструктора Tim Серверные языки и технологии 2 04.10.2009 23:28
Явный вызов процедуры обработки события. supchik Общие вопросы Javascript 18 27.01.2009 13:16