Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.07.2012, 18:31
Интересующийся
Отправить личное сообщение для imissyouso Посмотреть профиль Найти все сообщения от imissyouso
 
Регистрация: 28.06.2011
Сообщений: 15

Что есть конструктор?
Начал изучать javascript. Прочитал много статей по основам ООП, после моего классического понимания ООП в jav'e или php в голове появилась путаница.
Сначала опишу как я понял то что прочитал, а потом задав вопрос. (поправьте если понял не правильно)

объект можно создавать 2умя основными способами: через функцию-конструктор и через языковой литерал (var a = {}).
Функция конструктор позволяет создать объект по шаблону который описан в её реализации оперируя со ссылкой this. this наследует свойства и методы объекта ссылка на который указана в свойстве prototype конструктора.
вот есть такой код:

function Child(){}
function Parent()
{
    this.name = "Vasia"; 
}

var parent = new Parent();
//тут я указываю свойству конструтора prototype ссылку на объект parent
Child.prototype = parent;

var child = new Child();

alert(child.name);

Ну вот понятно что child и parent имеют право иметь свойства и методы (например name), потому что это ОБЪЕКТЫ.
Но как может быть свойство у функции? У конструктора Child?? Это же не объект. На данный момент я понимаю что да, этот код работает. Но по какой такой логике мы НЕ объекту указываем свойство(в данном случае св-во prototype для НЕ объекта Child). Как это работает на более нижнем уровне, на уровне интерпретатора языка? Вот что интересно, столько статей, а про это нет ни слова.

Последний раз редактировалось imissyouso, 08.07.2012 в 18:46.
Ответить с цитированием
  #2 (permalink)  
Старый 08.07.2012, 19:00
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от imissyouso
объект можно создавать 2умя основными способами: через функцию-конструктор и через языковой литерал (var a = {}).
литерал подразумевает вызов функции конструктора Object()

Сообщение от imissyouso
Но как может быть свойство у функции?
может

Сообщение от imissyouso
Это же не объект
объект

Сообщение от imissyouso
Вот что интересно, столько статей, а про это нет ни слова.
неправда
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 08.07.2012, 19:07
Интересующийся
Отправить личное сообщение для imissyouso Посмотреть профиль Найти все сообщения от imissyouso
 
Регистрация: 28.06.2011
Сообщений: 15

я считал что объекты создаются при помощи new с указанием класса(в данном языке - конструктора). Так каким же объектом является функция? Она же просто объявляется.
to nerv: если не можешь ответить нормально, а только односложными обрывками - лучше промолчи. Какой был в твоём посте смысл.

Последний раз редактировалось imissyouso, 08.07.2012 в 19:11.
Ответить с цитированием
  #4 (permalink)  
Старый 08.07.2012, 19:20
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

imissyouso, вообще, название темы - Что есть конструктор?. Конструктор - это функция.

http://shamansir.github.com/JavaScript-Garden/#function

Фленаган:
Цитата:
Важной чертой JavaScript является то, что функции представляют собой значения, которыми можно манипулировать в JavaScript-коде. Во многих языках, в том числе в Java, функции – это всего лишь синтаксические элементы языка, но не тип данных: их можно определять и вызывать. То обстоятельство, что функции в JavaScript представляют собой настоящие значения, придает языку большую гибкость. Это означает, что функции могут храниться в переменных, массивах
и объектах, а также передаваться в качестве аргументов другим функциям. Очень часто это бывает очень удобно.
Вопрос: какие доки ты "куришь"?

на закуску

Сообщение от imissyouso
Она же просто объявляется.
ты невнимателно читал. В js существуют две "разновидности" функций:
1. функции объявления
2. функции выражения
http://learn.javascript.ru/function-...ion-expression
http://shamansir.github.com/JavaScri...nction.general
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 08.07.2012 в 19:26.
Ответить с цитированием
  #5 (permalink)  
Старый 08.07.2012, 19:25
Интересующийся
Отправить личное сообщение для imissyouso Посмотреть профиль Найти все сообщения от imissyouso
 
Регистрация: 28.06.2011
Сообщений: 15

то есть здесь это такой тип данных?
и написав function Child(){}
интерпретатор создаст объект типа Function с именем Child который будет иметь поле prototype? Потом этот объект можно исползовать как конструктор используя совместно с оператором new?
Ответить с цитированием
  #6 (permalink)  
Старый 08.07.2012, 19:28
Интересующийся
Отправить личное сообщение для imissyouso Посмотреть профиль Найти все сообщения от imissyouso
 
Регистрация: 28.06.2011
Сообщений: 15

Во! оно! Спасибо большое, действительно, читал да не то. Извиняюсь за карму, верну
Ответить с цитированием
  #7 (permalink)  
Старый 08.07.2012, 19:38
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от imissyouso
то есть здесь это такой тип данных?
так говорит typeof
function F() {}
alert( typeof F );

Сообщение от imissyouso
интерпретатор создаст объект типа Function с именем Child который будет иметь поле prototype?
и не только его
Сообщение от imissyouso
Потом этот объект можно исползовать как конструктор используя совместно с оператором new?
да. Любую функцию можно использовать как конструктор или метод. И this - не тоже, что в других языках программирования. Короче, фишек много )

Сообщение от imissyouso
Извиняюсь за карму
фиг с ней )
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #8 (permalink)  
Старый 09.07.2012, 02:15
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от nerv_
В js существуют две "разновидности" функций:
1. функции объявления
2. функции выражения
Не совсем так. То, что вы написали является разновидностями объявлений функций, но не самих функций.
Ответить с цитированием
  #9 (permalink)  
Старый 09.07.2012, 06:55
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от imissyouso
я считал что объекты создаются при помощи new с указанием класса(в данном языке - конструктора). Так каким же объектом является функция?
fnc = new Function('a', 'alert(a)');
fnc("Hello");
Сообщение от imissyouso
то есть здесь это такой тип данных?
Функция высшего порядка

Последний раз редактировалось B@rmaley.e><e, 09.07.2012 в 06:58.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что происходит с firefox? trikadin Оффтопик 57 04.01.2012 00:18
событие на нажатие кнопки ane4ka ExtJS 27 14.12.2011 21:38
Как (эффективно) изучать JavaScript? JSTalker Общие вопросы Javascript 33 23.12.2010 03:13
Zend и Pear для нуба mycoding Серверные языки и технологии 52 13.12.2010 18:32
Разбираем AjaxOOP eai Общие вопросы Javascript 41 04.11.2010 23:37