Параметры для конструктора в массиве 
		
		
		
		Нужно вызвать конструктор, причем кол-во параметров заранее не известно, оно находится в массиве. Т.е. нужно сделать что-то типа: 
	
// arr - массив с параметрами.
var x;
switch( arr.length ) {
case 0: x = new MyConstructor(); break;
case 1: x = new MyConstructor( arr[0] ); break;
case 2: x = new MyConstructor( arr[0], arr[1] ); break;
case 3: x = new MyConstructor( arr[0], arr[1], arr[2] ); break;
}
apply в этом случае не помогает, нужно вызвать именно через new Можно было бы сделать так: var x = Object.create( MyConstructor.prototype ); MyConstructor.apply( x, arr ); но хочется сохранить совместимость с версией языка, где Object.create отсутствует. Кто-нибудь может что-нибудь подсказать?  | 
	
		
 Цитата: 
	
  | 
	
		
 Честно говоря, задал вопрос для очистки совести, сильно не надеялся, однако же... 
	
var x = (function(p){
  function T(){}
  T.prototype=p;
  return new T();
})( MyConstructor.prototype );
MyConstructor.apply( d, arr );
спасибо  | 
	
		
  | 
	
		
 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
 0. var x = new MyConstructor([ 1, 2, 3]); 1. 
MyConstructor.apply( null, arr );
function MyConstructor() {
if (!(this instanceof MyConstructor)) {
        return new MyConstructor( arguments );
    }
}
2. 
var x = new MyConstructor({
    лепи: че_хочешь
});
Наверно, массив-параметров или объект с параметрами передают не случайно, чтобы не городить такого Цитата: 
	
  | 
	
		
 
function Cat (name){
    this.name = name;
}
Cat.create = function(args){
	var _ = function(){};
	_.prototype = this.prototype;
	var inst = new _;
	this.apply(inst,args);
	return inst;
};
var cat = Cat.create(['Ашот']);
alert(cat.name);
а еще это можно использовать вот так вот 
function Cat(name, age) {
	if (this instanceof Cat === false) { // опа на
		return Cat.create(arguments);
	}
	this.name = name;
	this.age = age;
}
Function.prototype.create = function(args){
	var _ = function(){};
	_.prototype = this.prototype;
	var inst = new _;
	this.apply(inst,args);
	return inst;
};
var cat = new Cat('Ашот',11);
var cat2 = Cat('Ашот',11);  // и можно вызывать без new
 | 
	
		
 Цитата: 
	
  | 
	
		
 nerv_, 
	Все это хорошо и правильно, но вопрос был другой, не как написать правильный конструктор, а как вызвать имеющийся. megaupload, Приоритет instanceof ниже чем приоритер воскл.знака, значит скобки тут необходимы. А вот писать if( булевскоезначение === false ) действительно ужасно.  | 
	
		
 В кофескрипте написал это: 
	newMyConstructor = (arr...)->new MyConstructor arr... а получил вот это: 
var newMyConstructor,
  __slice = [].slice;
newMyConstructor = function() {
  var arr;
  arr = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
  return (function(func, args, ctor) {
    ctor.prototype = func.prototype;
    var child = new ctor, result = func.apply(child, args);
    return Object(result) === result ? result : child;
  })(MyConstructor, arr, function(){});
};
И походу должно работать.  | 
	
		
 Цитата: 
	
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 rgl, у тя баттхерд што ле , придурок)? 
	почему if( булево === false ) ужасно?  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 Цитата: 
	
 А не для протокола скажу - ты видимо и знаешь много, и опыт имеется, но так часто говоришь чушь, говоришь не в тему, и хамишь без причины, что впечатление производишь очень негативное.  | 
	
		
 rgl, он местный тролль же, давно бы уж пора было понять. 
	А тебя порвало как школьницу. Таки опыта если не программирования, то интернет-общения те явно не хватат.)  | 
	
		
 Цитата: 
	
 как считаешь что лучше если( не (это сущностьИз MyConstructor) ) или если( это сущностьИз MyConstructor === ложь ) с приоритетами дело в том что видимо он написал отрицание из-за того что подумал что инстансоф имеет меньший приоритет чем сравнение. он выбрал между if (!(this instanceof MyConstructor)) и if ( (this instanceof MyConstructor) === false) как мне показалось, он посчитал что и тут придется ставить скобочки, и я сказал мыл что скобочки ставить не нужно так что не нужно сдерживаться и можно напистаь более очевидно и красиво if ( this instanceof MyConstructor === false ) раз у instanceof приоритет выше чем у === оператор ! имеет больше такой смысл: 
<script>
var toggle = false;
onclick = function(){
    var value = toggle ? 1 : 2;
    alert(value);
    toggle = !toggle;
}
</script>
! это когда нам нужно развернуть значение, получить его антипод, а в нашем случае нам нужно сказать что обьект не является сущностью класса ТакогоТо, тут ни о каком разворачивании и получении негатива речи не идет, речь идет о принадлежности к классу и смысла использовать не тот по смыслу оператор смысла нет и есть смысл его не использовать. Пнятна? п.с. да, жопку у тя взорвало конечно)) Aetae, Цитата: 
	
 они все сами начинают)) если ты не заметил.  | 
	
		
 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 Если чебурек вкусный - это ложь, то дайте пирожок. :D  | 
	
		
 :no: 
	 | 
	
		
 Цитата: 
	
 return из магазина :)  | 
	
		
 Цитата: 
	
 value = 3 - value; или в магазин пирожками торговать.  | 
	
		
 У тя до сих пор припекает штоле? :yes: 
	 | 
| Часовой пояс GMT +3, время: 15:25. |