Jump to content

Имена объектов в JS


Great Rash
 Share

Recommended Posts

  • Replies 52
  • Created
  • Last Reply

Top Posters In This Topic

Имена объектов принято писать с Большой буквы. Это общепринятое соглашение среди программистов на любом языке... кроме PHP...

Позволю поправить. Имена не объектов, а Конструкторов.

Link to comment
Share on other sites

Нет уж, именно объектов. Конструктор, в классическом OOP - это просто блок кода, вызываемый автоматом при создании объекта. Напрмер вот так он выглядит в PHP:


class Object { // собссно объект
public $test = 0;

function __construct() { // конструктор объекта
$this->test = 10; // при создании объекта устанавливает новое значение переменной
}
}

UPD: в JS, как обычно, все немного не так, конструктор нет необходимости создавать явно, но он есть (в нем хранятся все значения объекта):


function MyObject() {
return {
test: 10;
};
}

alert(MyObject().constructor);

Link to comment
Share on other sites

Great Rash, Погоди дружище. Ну, ведь получается, именно имена Функций - Конструкторов пишутся с большой? А объекты - это их экземпляры ведь уже? :unsure:

Да и потом ведь необязательно возвращать из Конструктора объект, согласись?

Link to comment
Share on other sites

Объект - это объект. И создаем мы экземпляр объекта, а не экземпляр конструктора. Конструктор - это код, который помогает объекту стать таким как надо. Вот например такой пример:

Есть у нас Буратино, только выглядит он как кусок дерева.

Чтобы он выглядел как настоящий Буратино, ему нужен конструктор - папа Карло.

Мы создаем экземпляр Буратино, а не экземпляр папы Карло. Когда нам нужен новый Буратино, папа Карло (конструктор объекта) создает нам нового.

Понятно?

Link to comment
Share on other sites

Объект - это объект. И создаем мы экземпляр объекта, а не экземпляр конструктора. Конструктор - это код, который помогает объекту стать таким как надо. Вот например такой пример:

Есть у нас Буратино, только выглядит он как кусок дерева.

Чтобы он выглядел как настоящий Буратино, ему нужен конструктор - папа Карло.

Мы создаем экземпляр Буратино, а не экземпляр папы Карло. Когда нам нужен новый Буратино, папа Карло (конструктор объекта) создает нам нового.

Понятно?

Нихрена, не согласен. Мы создаём экземпляр (объект) Именно папы Карло, т.е. экземпляр класса Карло. :)

Link to comment
Share on other sites

Ну во первых в языках программирования принято писать имена классов/интерфейсов с большой. Так как в JS и класс и конструктор один объект то его имя пишется естественно тоже с большой буквы. Так же, например в AS3 конструктор должен иметь такое же название как и класс, то есть так же писаться с большой буквы (Естественно если придерживаться правила написания имён классов с больших букв).

Конкретно в JS придерживаются следующих правил:

Имена классов пишутся в CamelCase.

Имена переменных/свойств объектов пишутся в lowerCamelCase.

Имена констант пишутся в LOWER_CASE;

Конкретно на имена объектов никакие правила (все правила условные конечно) не распространяются. Не считая встроенные объекты языка, например, такие как Math.

UPD:

the following pseudo code:

function ClassName(){}
ClassName.prototype.firstPropertyName = 1;
ClassName.prototype.secondPropertyName = function(){}
ClassName.prototype.thirdPropertyName = 'some string';
var objectName = new ClassName();
objectName.secondPropertyName();
var anotherObjectName = function(){return {property: false}},
someCompositionExamplar = anotherObjectName();
alert(someCompositionExemplar.property)

  • Like 2
Link to comment
Share on other sites

Объекты пишутся с большой буквы.


var objectName = new ClassName();

Тут:

ClassName - это объект (называйте его классом или вообще как хотите).

objectName - это переменная, содержащая экземпляр объекта (класса).

Имена констант пишутся в LOWER_CASE;

UPPER_CASE; конечно же ;)

Имя конструктора объекта никак не пишется, оно есть и все тут.

Link to comment
Share on other sites

Имена констант пишутся в LOWER_CASE;

UPPER_CASE; конечно же ;)

Да, опечатка, заигрался, извините :)

Объекты пишутся с большой буквы.


var objectName = new ClassName();

Тут:

ClassName - это объект (называйте его классом или вообще как хотите).

objectName - это переменная, содержащая экземпляр объекта (класса).

Вы путаете формулировки. В JavaScript объект есть всё. То есть абстрактное понятие типа данных.

Называйте его как хотите ... разве мы этого хотим? Функции которые объявляются для использования их в качестве конструкторов других объектов называются классами. Хотя в JS нет конкретного понятия класс, однако если брать по аналогии с другими языками такое название самое логичное.

Как и экземпляр класса, как и сам класс, как и все остальные типы данных в JavaScript - объекты. По этому глупо говорить, что имя объекта пишется с большой буквы. Имя типа данных пишется с большой буквы, хотя не трудно запутаться.

Если залезть в спецификацию ES3 можно увидеть, что конструкция типо:

new Object([ value ]);

называется вызовом конструктора Object.

Соответсвенно

function Object(){}

Есть конструктор объекта.

А имя:

Object

Является типом данных. (Тут конечно не совсем правильно тоже, к типам данных более приближены примитивы, но в контексте JavaScript это трудно объяснить, просто стоит понять)

П.С. Формулировка описания языка для AS3 и JS очень различны и если с начала учить AS то потом перейдя на JS вы будете выражаться так же как там.

Имя конструктора объекта никак не пишется, оно есть и все тут.

Ещё раз повторю, в JavaScript конструктор и класс фактически одно и тоже, так как эта одна функция которая испульзуется и при проверке данных и при создание экземпляра. В других языках где используется ключевое слово class, конструктором класса является функция у которой имя совпадает с именем класса.

Link to comment
Share on other sites

Цитата: Great Rash

Вызов конструктора Object это не вызов Object, а вызов Object.construct. Именно это происходит когда я пишу new Object();

В JS не всё объекты:

var x = undefined;

alert(typeof x);

вот, например, не объект, а иной встроенный тип данных.

Link to comment
Share on other sites

Вызов конструктора Object это не вызов Object, а вызов Object.construct. Именно это происходит когда я пишу new Object();

Нету такого свойства у Object, даже Object.constructor нету.

Есть:

Object.prototype.constructor

Для которого справедливо правило:

Object.prototype.constructor === Object;

В JS не всё объекты:


var x = undefined;
alert(typeof x);

вот, например, не объект, а иной встроенный тип данных.

Я вам и написал что есть и примитивы и это нечто другое и это нужно понимать. Например при передавании примитива в функцию в качестве объекта this примитив превращается в ObjectWrap. А вместо примитива void/undefined возвращается глобальный объект. Одна такое поведение отменено в ES5 (strict mode), да и вообще глупо их сюда приплетать.

П.С. Кстати ваш выше приведённый код вызовет ошибку. так как у window по умолчанию не объявлена переменная undefined. Для корректной работы нужно делать просто так:

var x;

Хотя если так хочется явно можно и так:

var x = void 0;

Link to comment
Share on other sites

Как же нету? Вот код, который все показывает:


function Test() {
this.i = 10;
}

alert(Test.constructor);

вот оно свойство - имеется, и без всяких прототипов.

П.С. Кстати ваш выше приведённый код вызовет ошибку. так как у window по умолчанию не объявлена переменная undefined.

Undefined - это не переменная, это тип данных. Ошибку код не вызывает, можете проверить.

Link to comment
Share on other sites

Как же нету? Вот код, который все показывает:


function Test() {
this.i = 10;
}

alert(Test.constructor);

вот оно свойство - имеется, и без всяких прототипов.

П.С. Кстати ваш выше приведённый код вызовет ошибку. так как у window по умолчанию не объявлена переменная undefined.

Undefined - это не переменная, это тип данных. Ошибку код не вызывает, можете проверить.

А вот теперь сами проверьте:

function Test() {
this.i = 10;
}

alert(Test.constructor === Function);
alert(Test.constructor === Test);
alert(Test.prototype.constructor === Test);

На счёт undefined погорячился, да. Но сути не меняет.

Link to comment
Share on other sites

А вот теперь сами проверьте

Не-не-не, мне не важно, чему равен конструктор. Важно есть он или его нет в принципе. Я лишь утверждаю, что у любого объекта есть конструктор, а прототипы - это уже отдельная тема.

Link to comment
Share on other sites

А вот теперь сами проверьте

Не-не-не, мне не важно, чему равен конструктор. Важно есть он или его нет в принципе. Я лишь утверждаю, что у любого объекта есть конструктор, а прототипы - это уже отдельная тема.

Ну конечно есть конструктор ибо он наследуется из прототипа и указывает на конструктор этого объекта. О чём спор то вообще уже? Мы говорили о том что такая функция:

function Test(){}

И есть конструктор для её экземпляров. И конечно у неё есть тоже конструктор так как функция тоже объект и наследует через прототип ссылку на конструктор.

Link to comment
Share on other sites

Чет я уже запутался короче в этик конструкторах и прототипах :)

В общем я считаю, что неправильно называть function Test(){} конструктором. Так же как не совсем правильно называть это классом. Правильно называть эту конструкцию объектом, а var t = new Test(); - экземпляром объекта Test.

Link to comment
Share on other sites

Имена объектов принято писать с Большой буквы. Это общепринятое соглашение среди программистов на любом языке... кроме PHP...

Ой ли. В C++ их активно пишут с маленькой_буквы_через_землю, и с классами тоже так бывает. В жабе - с маленькойБуквыCamelStyle, а классы - с БольшойБуквы. В шарпе объекты тоже пишут с БольшойБуквы, как и классы.

Вообще это от личного стиля зависит, как и расставление фигурных скобок. Главное, чтоб внутри команды стиль был один, остальное - побоку.

Edited by Gaspode
Link to comment
Share on other sites

Ой ли. В C++ их активно пишут с маленькой_буквы_через_землю, и с классами тоже так бывает. В жабе - с маленькойБуквыCamelStyle, а классы - с БольшойБуквы. В шарпе объекты тоже пишут с БольшойБуквы, как и классы.

Писать можно хоть задом наперед, но это не значит, что это правильно. По-моему имя класса с Большой буквы это уже как стандарт. В яве чем отличается объект от класса? Я ее совсем не знаю.

Вообще это от личного стиля зависит, как и расставление фигурных скобок. Главное, чтоб внутри команды стиль был один, остальное - побоку.

Согласен, это самое главное. Только вот переучиваться со стиля на стиль довольно тяжело. Ну и опять же кто решает кто под чей стиль должен подстроиться? Вы под мой или я под ваш?

Link to comment
Share on other sites

По-моему имя класса с Большой буквы это уже как стандарт.

В стандартной библиотеке C++ многие классы с маленькой буквы пишутся (string, istream, ostream, vector...).

В яве чем отличается объект от класса?

Как в C++, с минимальной разницей. Примерный синтаксис:

class MyClass {
}

[...]

MyClass myObject = new MyClass(аргументы для конструктора);

Ну и опять же кто решает кто под чей стиль должен подстроиться?

Шеф =D В смысле, главный кодер. На крайняк, можно монетку бросить :)

Edited by Gaspode
Link to comment
Share on other sites

В стандартной библиотеке C++ многие классы с маленькой буквы пишутся (string, istream, ostream, vector...).

Разве это хорошо? В C++, насколько мне известно, очень просто объявить свой тип данных, замене могут подвергаться даже операнды (+, - и т.п.), по-моему гораздо лучше, когда Класс или Объект сразу видно в коде.

class MyClass {
}

[...]

MyClass myObject = new MyClass(аргументы для конструктора);

Ну тут, по-моему, все логично: MyClass - это собссно класс, а myObject - это экземпляр красса. Так же и в JS:


function MyObject() {} // Объект (Класс)

var myObject = new MyObject(); // экземпляр Объекта (Класса)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy