Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
front-end developer
284 / 275 / 39
Регистрация: 31.08.2010
Сообщений: 577
Записей в блоге: 1
1

Создание объектов JS

22.11.2011, 15:33. Показов 2282. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Наткнулся на создание объекта с помощью конструктора (function):

Javascript
1
2
3
4
var new_obj = new function(){
 ......
 return true;
}
Зачем использован return и чему присвоится true?
new_obj - ссылается на новый объект.
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2011, 15:33
Ответы с готовыми решениями:

Создание списка объектов класса с заранее неизвестным именем (именем самих объектов)
Уважаемые программисты, не получается решить такую задачу: требуется создать приложение (в консоли)...

Создание кода из строк или создание произвольного количества объектов
Привет сообществу. Возник такой вопрос: Мне в мидлете необходимо создать некоторое количество...

Создание объектов
Здравствуйте, вот никак не могу создать собственные объекты. <html> <head> <title> Карточка...

Создание объектов
Здравствуйте.Случайно в интернете наткнулся на такую вот штуку(пример): public class...

8
38 / 38 / 6
Регистрация: 16.11.2011
Сообщений: 112
22.11.2011, 17:17 2
Это называется через ОПУ...)))
проще создать объект через анонимную функцию но так :

Javascript
1
2
3
var Class = function(){
   //Методы
};
а теперь создаем объект этого класса

Javascript
1
var obj = new Class();
0
Просто любитель
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
22.11.2011, 17:18 3
Спасибо за интересный пример!
Похоже это создание экземпляра безымянного класса. Насколько я понимаю, эквивалентно:
Javascript
1
2
3
4
5
6
function TestObject() {
    //конструктор класса
    alert(1);
    return true;
}
var new_obj = new TestObject;
В данном случае в классе нет никаких полей, поэтому new_object получит только значение прототипа класса, экземпляром которого является. Конструктор будет доступен как обычно, через свойство .constructor. Куда уходит true, понять не могу, похоже в никуда. Но если возвращать функцию(видимо дело в замыкании), то именно она присвоится new_obj.
0
38 / 38 / 6
Регистрация: 16.11.2011
Сообщений: 112
22.11.2011, 17:26 4
в данном случае нет вообще никакой разницы что true что false вернуть.
Наверно это может быть лишь каким нибудь сигнализатором типа ожидаемого объекта и не больше...
0
Просто любитель
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
22.11.2011, 17:38 5
Заглянул в спецификацию. В упрощенном виде (потому что в неупрощённом я сам до конца не понимаю — квалификация не та) схема выглядит так:
new
1. Устанавливает переменной слева [[class]] = Object.
2. Получает прототип конструктора и
3. если прототип является объектом, присваивает его (прототип конструктора) прототипу экземпляра. Иначе присваивает прототипу экземпляра Object.prototype.
4. Вызывается конструктор с аргументами, которые ему переданы, при этом под this подразумевается экземпляр объекта.
5. Если полученное в п.4 значение — объект, то присваивает экземпляру результат п.4, иначе присваивает экземпляру результат Object().


Теперь становится понятно, что происходит при возврате необъекта (хоть true хоть ещё чего-то).
1
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
22.11.2011, 18:30 6
Лучший ответ Сообщение было отмечено как решение

Решение

Все верно. Если код конструктора возвращает скалярное значение ("необъект"), то оно не учитывается и возвращается экземпляр данного "класса". Если же возвращается экземпляр Object или любого другого "класса", то возвращается этот самый возвращенный объект.

Это позволяет писать конструкторы, например, standalone-объектов (существующих в единственном экземпляре):
Javascript
1
2
3
4
5
6
7
8
function Foo(){
   // если объект уже был создан ранее, возвращаем ссылку на него
   if (Foo.obj) return Foo.obj;
   // иначе инициализируем объект и запоминаем его в себе 
   Foo.obj = this;
}
 
(new Foo) === (new Foo); // true, потому что один и тот же standalone-объект
Добавлено через 11 минут
Кстати, вполне возможно использовать конструктор по его назначению без new:
Javascript
1
2
3
4
5
6
7
8
9
10
function Foo(){
   // проверка: использовал ли программист new?
   if (!(this instanceof Foo)) return new Foo;
   this.a = 1;
   this.b = 2;
   this.c = 3;
}
 
(new Foo) instanceof Foo; // true
( Foo() ) instanceof Foo; // тоже true
5
front-end developer
284 / 275 / 39
Регистрация: 31.08.2010
Сообщений: 577
Записей в блоге: 1
23.11.2011, 19:02  [ТС] 7
Цитата Сообщение от GuardCat Посмотреть сообщение
Заглянул в спецификацию. В упрощенном виде (потому что в неупрощённом я сам до конца не понимаю — квалификация не та) схема выглядит так:
new
1. Устанавливает переменной слева [[class]] = Object.
2. Получает прототип конструктора и
3. если прототип является объектом, присваивает его (прототип конструктора) прототипу экземпляра. Иначе присваивает прототипу экземпляра Object.prototype.
4. Вызывается конструктор с аргументами, которые ему переданы, при этом под this подразумевается экземпляр объекта.
5. Если полученное в п.4 значение — объект, то присваивает экземпляру результат п.4, иначе присваивает экземпляру результат Object().
Теперь становится понятно, что происходит при возврате необъекта (хоть true хоть ещё чего-то).
GuardCat, Можете, пожалуйста, пояснить пункты? А то с прототимом не так близко знаком..с ООП со стороны С++ больше работал.
0
Просто любитель
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
23.11.2011, 21:42 8
Под прототипом я подразумевал YourClass.prototype. А вообще, ООП в javascript (как говорят программисты, знающие другие ООП языки) сильно отличается от классического, как в части наследования, так и в части инкапсуляции. Чем не знаю, поскольку на классах больше нигде не писал.
0
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
23.11.2011, 21:56 9
Кому интересно, прочитайте эти замечательные наблы: 38 39 40
Про JS в общем и про особенности ООП в частности. Как минимум увлекательно.
1
23.11.2011, 21:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2011, 21:56
Помогаю со студенческими работами здесь

Создание объектов
Здравтсвуйте! Хочу спросить, почему лучше пользоваться указателем на объект (при ООП) Animals...

Создание объектов
Допустим есть код: interface IShape { color: string; } interface IPenStroke { ...

Создание объектов в Qt
Здравствуйте. Вопрос знатокам Qt. В примерах использования этой библиотеки, очень часто (в...

Создание объектов
Есть, например, игрушка с массовым уничтожением зомбей. Нужно, чтобы зомби постоянно "создавались"...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru