Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос по определению функции (https://javascript.ru/forum/misc/21808-vopros-po-opredeleniyu-funkcii.html)

capscom 24.09.2011 23:02

Вопрос по определению функции
 
Изучая ява-скрипт, ни как не могу понять принцип работы такой записи:

var p = function(){
       ....
};

p.def = {
   ...     
};


Чем, в данном случае, является объект p.def? Свойством класса? А сама p = function() - это получается конструктор?

Поясните, пожалуйста, новичку. Хочется разобраться.
Спасибо.

Kolyaj 24.09.2011 23:20

Т.к. p -- функция, то p.def, очевидно, является свойством функции.

capscom 24.09.2011 23:25

Kolyaj, спасибо. То есть не только у объектов, но и у функций есть свойства?
И как из функции правильно обращаться к ее свойствам?

B@rmaley.e><e 24.09.2011 23:59

Цитата:

Сообщение от capscom
То есть не только у объектов, но и у функций есть свойства?

В JS всё (с некоторыми оговорками) — объект. И функции в том числе.
Цитата:

Сообщение от capscom
И как из функции правильно обращаться к ее свойствам?

Так же, как и к свойствам объекта.
varName.propertyName

Kolyaj 25.09.2011 10:33

Цитата:

Сообщение от B@rmaley.e><e
В JS всё (с некоторыми оговорками) — объект. И функции в том числе.

Нет никаких оговорок, есть объекты, есть примитивные типы.

capscom 25.09.2011 12:03

B@rmaley.e><e, Kolyaj

Спасибо. И последний нюанс, если сделаю new p() , то p.def становится свойством класса ? и к нему можно обращаться теперь из методов, с помощью указателя this ?

Kolyaj 25.09.2011 12:10

Нет.

capscom 25.09.2011 12:15

Kolyaj, а почему нет? поясните, пожалуйста.

Kolyaj 25.09.2011 12:18

А почему должно быть да?

http://javascript.ru/tutorial/object

capscom 25.09.2011 12:42

Просто мне казалось что:
var test = new p()
test.def - свойство объекта будет равно значению p.def

Kolyaj 25.09.2011 13:00

Ну я не могу ответить, почему вам так кажется. Читайте ссылку.

monolithed 25.09.2011 13:27

Цитата:

Сообщение от capscom
Просто мне казалось что:
var test = new p()
test.def - свойство объекта будет равно значению p.def

var foo = function() {
    this.some = 1;
};

foo.prototype.some = 2;
foo.some = 3;

var bar = new foo();

alert([
    bar.some, // однако, если в конструкторе foo не будет определено свойство some, то значением будет взято из прототипа!
    foo.prototype.some,
    bar.constructor.some
]);

capscom 25.09.2011 15:54

Kolyaj, monolithed
Спасибо большое. Разобрался)


Часовой пояс GMT +3, время: 17:35.