Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.05.2011, 05:52
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Вызов стандартного конструктора без "new"
Что-то меняется если вызывать стандартные конструкторы без "new"?
Например, "Object(true)" вместо "new Object(true)".
Ответить с цитированием
  #2 (permalink)  
Старый 29.05.2011, 08:27
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Object без new подобен Object'у c new, но без new.)
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 29.05.2011, 08:52
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Клёва
Ответить с цитированием
  #4 (permalink)  
Старый 29.05.2011, 08:53
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Riim
Что-то меняется если вызывать стандартные конструкторы без "new"?
в этом случае: происходит преобразование объектного типа к примитиву
var foo = Object(true);
alert(foo);


а в этом: new отвечает за создание внутреннего метода [[Construct]] и инициализацию его аргументов
function Foo() { // конструктор А
  this.bar = true;
}
 
var foo = new Foo;
alert(foo.bar);
Ответить с цитированием
  #5 (permalink)  
Старый 29.05.2011, 09:11
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от monolithed
происходит преобразование объектного типа к примитиву
разве не наоборот?
Ответить с цитированием
  #6 (permalink)  
Старый 29.05.2011, 09:12
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

monolithed
Это как бы очевидно, но конкретно для пустого объекта роли не играет.
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 29.05.2011, 09:17
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Riim
разве не наоборот?
нет, к примеру для String() неявно вызывается метод toString(), a для Number() метод valueOf()

Сообщение от Aetae
Это как бы очевидно, но конкретно для пустого объекта роли не играет.
однако, для Date, такой фокус не прокатит
так да:
var date = new Date;
alert(date.getDate());

а вот так уже нет:
var date = Date;
alert(date.getDate());


а для Array, String, Number, Function, RegExp вполне:
alert('foo'.match(RegExp('\\w', 'g')));

Последний раз редактировалось monolithed, 29.05.2011 в 09:33.
Ответить с цитированием
  #8 (permalink)  
Старый 29.05.2011, 09:42
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

"new Boolean(true)" это тоже примитивный тип? Наверное, там что-то вроде того:
function Object(item) {
	if (item != null) {
		return new item.constructor(item);
	}
	/* ..... */
}


UPD: хотя нет, если бы так, то alert срабатывал бы больше одного раза:
function Foo() {
	alert('Foo');
}
var foo = new Foo();

Object(foo);
new Object(foo);

Последний раз редактировалось Riim, 29.05.2011 в 09:50.
Ответить с цитированием
  #9 (permalink)  
Старый 29.05.2011, 09:58
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

кстати, Преобразование типов

Последний раз редактировалось monolithed, 29.05.2011 в 10:05.
Ответить с цитированием
  #10 (permalink)  
Старый 29.05.2011, 10:39
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от monolithed
a для Number() метод valueOf()
var n = 5;
alert('test' in Object(n));// false
alert('test' in new Number(n));// false
alert('test' in n.valueOf());// error
alert('test' in Number(n));// error

Последний раз редактировалось Riim, 29.05.2011 в 10:44.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов javascript из php без клика Darktj Firefox/Mozilla 11 01.07.2011 18:02
вызов стандартного окна "открыть" kiff86 Events/DOM/Window 22 29.04.2011 16:27
Явный вызов конструктора Tim Серверные языки и технологии 2 04.10.2009 23:28