Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
48 / 87 / 11
Регистрация: 12.08.2013
Сообщений: 474

Использование функций конструкторов

21.09.2013, 18:29. Показов 662. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть ли разница как использовать функцию конструктор с оператором new или без?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.09.2013, 18:29
Ответы с готовыми решениями:

Использование дружественных функций и конструкторов преобразования
Компилятор MVS 2017 выдает две ошибки: Ошибка C2679 бинарный "+": не найден оператор, принимающий правый операнд типа "int"...

Использование конструкторов. Перегрузка конструкторов. Использование свойств
Помогите реализовать свойства, позволяющие осуществить проверку на допустимые значения для данных класса. using System; using...

Использование конструкторов и деструкторов
Решить в консольном режиме: Дан набор из N вещественных чисел. Проверить, образует ли данный набор возрастающую последовательность. Если...

5
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
21.09.2013, 20:49
простенький пример, из которого, имхо, всё становится понятным:
JavaScript
1
2
3
4
5
6
7
function A () {return 5}
 
var B = new A ();
var C =     A ();
 
alert (B);
alert (C);
1
48 / 87 / 11
Регистрация: 12.08.2013
Сообщений: 474
21.09.2013, 23:23  [ТС]
Цитата Сообщение от kalabuni Посмотреть сообщение
простенький пример, из которого, имхо, всё становится понятным:
JavaScript
1
2
3
4
5
6
7
function A () {return 5}
 
var B = new A ();
var C =     A ();
 
alert (B);
alert (C);
во втором случае понятно, что там результат вызова функции присваивается, а вот если предопределёнными конструкторами пользоваться, есть разница?

JavaScript
1
2
3
4
5
var B = new Array ();
var C =     Array ();
 
alert (typeof B);
alert (typeof C);
0
 Аватар для vovandr
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
22.09.2013, 00:11
Функция конструктор без new (хотя по идее это не какой не конструктор) по дефолту возвращает тот же результат что и обычная функция (undefined). При вызове с new функция будет возвращать объект (контекст this внутри этой функции будет ссылаться на этот создаваемый объект, без new будет ссылаться на window)
1
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
22.09.2013, 08:03
Также, если функция, вызванная в качестве конструктора, вернет какой-то объект, то именно он станет результатом оператора new.
JavaScript
1
2
>>> new (function () { return [this, window]; })()
Array [Object, Window]
1
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
22.09.2013, 12:18
Цитата Сообщение от Justff Посмотреть сообщение
а вот если предопределёнными конструкторами пользоваться, есть разница?
JavaScript
1
2
3
4
var B = new Array ();
var C =     Array ();
alert (typeof B);
alert (typeof C);
ваш пример не совсем удачен

посмотрите следующее:
JavaScript
1
2
3
4
var B = new String ('abc');
var C =     String ('abc');
alert (typeof B);
alert (typeof C);
String - это ведь тоже предопределённая функция-конструктор

согласно спецификации, оператор new вызывает внутренний метод [[Construct]], который выделяет память под создание именно объекта и под сам объект
-------

кроме того, массив - это специфический объект, ибо только он имеет свойство length
и потому в случае функции-конструктора Array, ИМХО, лучше было проверять не через typeof, а так:
JavaScript
1
2
3
alert ('length' in C);
// или
alert (С.hasOwnProperty('length'));
кстати, попробуйте ещё и так:
JavaScript
1
2
3
4
5
6
7
8
var D = new Array;
var E = Array;
 
alert (D.typeof); // object 
alert (E.typeof); // function
 
alert ('length' in D); // true
alert ('length' in E); // true, что как бы неожиданно, не правда ли? :))
последнее, ИМХО, объясняется просто: JavaScript является слабо типизированным языком, что означает, что JavaScript выполняет преобразования автоматически, в тот момент, когда они необходимы

разумеется, последний вариант надо использовать очень аккуратно, ибо:
JavaScript
1
2
3
4
5
var E = Array;
E [0] = 2;
 
var F = Array;
alert (F [0]);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2013, 12:18
Помогаю со студенческими работами здесь

Использование конструкторов и деструкторов
Решить задачу в консольном режиме Даны целые числа K, N и набор из N целых чисел. Если в наборе присутствует число, меньшее K, то...

Создание и использование конструкторов
Требуется создать новый класс с именем DateFour, с несколькими конструкторами, а затем протестировать созданный класс, используя...

Использование нескольких конструкторов this() сразу
Допустим, имеем следующий код public Debug(Config cfg) { this.cfg = cfg; } public Debug(Device device) { ...

Двойное использование делегирования конструкторов
Есть клас square который сначало делигирует свою роботу предку, но я еще хочу чтобы он затем и делгировал свою роботу конструктору по...

Правильное использование конструкторов и деструкторов
#include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; class Worker {public: ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru