Форум программистов, компьютерный форум, киберфорум
Наши страницы
jQuery
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/36: Рейтинг темы: голосов - 36, средняя оценка - 4.78
Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
1

Javascript - классы, они есть или их нету в Javascript?

02.03.2011, 02:48. Просмотров 6445. Ответов 9
Метки нет (Все метки)

Скажите, в Джаваскрипт есть классы как в пхп например?
Я так толкового ответа порывшись по интернету не нашёл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2011, 02:48
Ответы с готовыми решениями:

Есть ли в JavaScript или JScript класс Object?
Есть ли в JavaScript или JScript подобный класс ? И каков его интерфейс ? Что...

Есть ли средство в JavaScript или jquery по подобию работы тэга map?
Есть ли средство в JavaScript или jquery по подобию работы тэга map?...

Классы и объекты JavaScript
Создайте веб-страницу. Страница должна выводить дату и время, используя...

переведите с паскаля на JavaScript пару строчек (классы)?
Type TMyCar = record name:string; koleso:array of integer; end; вот это...

Код javascript для создания теста, используя html form и javascript
Привет, собственно, вот, в чём вопрос. У меня есть форма html: <!DOCTYPE...

9
Vovan-VE
13159 / 6544 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
02.03.2011, 14:54 2
Golovastik, И да. и нет. В JavaScript'е все совсем по-другому.
http://javascript.ru/ecma
http://dmitrysoshnikov.com/ecmascript/ru-chapter-0-introduction/
0
Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
02.03.2011, 17:05  [ТС] 3
На пхп класс описуется так:

Код
<?php
class A{
public function t(){
print("Привет мир!");
}
}
$t = new A();
$t->t();
?>

Как такое же самое только на JAVASCRIPT?
0
Vovan-VE
13159 / 6544 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
02.03.2011, 17:10 4
Цитата Сообщение от Golovastik Посмотреть сообщение
Как такое же самое только на JAVASCRIPT?
В JavaScript'е концепция ООП совершенно иная. Ответ: в таком виде никак. Классов, как таковых, нет. Есть только объекты. У объектов есть (точнее бывают) прототипы, которые тоже объекты. Боюсь, на пальцах всего этого в двух словах невозможно изложить.
Javascript
1
2
3
4
5
6
7
8
9
function A() {
 
};
A.prototype.t = function(){
    alert('foo bar 42');
};
 
var a = new A();
a.t();
1
Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
02.03.2011, 17:44  [ТС] 5
А если вот так переписать, это будет класс?
Javascript
1
2
3
4
5
function A ( ){
this.t = function () { alert('Hello my little friend') }
}
var a = new A();
a.t();
Добавлено через 1 минуту
Код
 Есть только объекты. У объектов есть (точнее бывают) прототипы,
то есть функция которую я создаю в которой описываю свойства это не функция а объект, а не класс?
0
Vovan-VE
13159 / 6544 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
02.03.2011, 18:07 6
Цитата Сообщение от Golovastik Посмотреть сообщение
А если вот так переписать, это будет класс?
Нет. Так свойство t у каждого объекта будет свое (own property в формальной терминологии), а том случае это свойство прототипа.

Цитата Сообщение от Golovastik Посмотреть сообщение
то есть функция которую я создаю в которой описываю свойства это не функция а объект, а не класс?
Классов нет, как таковых. Функция - это тоже объект с особым поведением. Любая функция может быть использована в качестве конструктора.

Классов в привычном виде нет в принципе. Есть объекты, прототипы и цепи прототипов.

Golovastik, Без обид. Мне кажется, Вам рановато делать упор на ООП в JavaScript. Если, все-таки, очень хочется, то читайте и изучайте спецификацию ECMA, на базе которой основал JavaScript. Первая ссылка во втором посте.
1
Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
04.03.2011, 01:23  [ТС] 7
Код
function A ( ){
this.t = function () { alert('Hello my little friend') }
}
var a = new A();
a.t();
Что означает this здесь, почему для каждого свойства и метода его нужно писать, почему без него нельзя описать свойство или метод?

Добавлено через 5 часов 32 минуты
Читаю здесь http://javascript.ru/tutorial/object/thiskeyword
Код
function Animal(name) {
    this.name = name
}
animal = new Animal("beastie");
Если следовать согласно картинке по этой ссылке:
1. Конструктор Animal инициализирует объект под названием animal.
2. После того, как инициализация объекта под названием animal прошла.
конструктор Animal создал где-то в оперативной памяти ячейку с названием this
которая стала ссылаться на свойства и методы конструктора под названием Animal?
3. Что вызывается если уже всё вызвалось ,если следовать согласно картинке?

Расшифруйте пожалуйста те, 3 пункта из той ссылки правильно.
Заранее благодарю.

Добавлено через 52 минуты
Код
// Вот здесь в первой строке метод Animal - это класс?
function Animal(name) { 
    this.name = name 
}
animal = new Animal("beastie");
Скажите, а сам this находится в оперативной памяти компа, где-то в ячейке? И в этот момент, когда конструктор вызвался, он сразу инициализировал объект animal выделив сразу и память для него и сразу сам конструктор с именем Animal стал указывать на любое свойство и метод класса Animal или сама конструкция this,которая лежит где-то в оперативной памяти компа и хранит адрес, стала хранит ссылку, а не конструктор стал хранить ссылку на любое свойство или метод класса?

Добавлено через 22 часа 15 минут
this указывает на объект класса или на свойство или метод класса?

1.1)А где хранится this само, в чём оно находится, в интерпретаторе или в ячейке Оп памяти?
1.2)
Код
animal = new Animal("beastie");
После вызова конструктора, конструктор инициализировал объект и конструктор стал указывать на этот объект или this(встроенная конструкция языка джаваскрипт)?
1.3)Вот этот код:
Код
function Animal(name) { 
    this.name = name 
}
Это создание конструктора или класса Javascript?

Добавлено через 1 час 2 минуты
То есть в зависимости от того в каком контексте зис находится он в зависимости от этого будет содержать ссылку на тот или иной именно объект, а не свойство или метод объекта?

Если я напишу так

pavel.dyrov.psix

На какой объект будет указывать ключевое слово зис.?
0
Hagrael
БТР - мой друг
331 / 273 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
04.03.2011, 06:58 8
Javascript
1
2
3
4
function Animal(name) {
    this.name=name
}
animal=new Animal("rabbit")
this в функции указывает на создаваемый объект. То есть когда вы вызываете функцию как конструктор, в оперативной памяти сразу же выделяется память под этот объект, и когда вы пишите this.name=name, вы присваиваете свойству объекта .name значение, посланное аргументом name. Вы спрашиваете, зачем нужно писать this. Отвечаю примером:
Javascript
1
2
3
4
5
function Animal() {
    name="rabbit"
}
animal=new Animal()
alert(animal.name)
Данный код покажет undefined, т. к. name="rabbit" означает, что надо присвоить глобальной переменной name значение "rabbit", и объекту ничего не присвоиться. Если вы напишете var name="rabbit", то создастся локальная переменная name со значением "rabbit", а с объектом так же ничего не сделается. А чтобы присвоить переменную самому объекту, то надо написать this.name="rabbit". Для чего столько мороки? Не могли ли разработчики стандартов сделать все проще? Могли, но такой большой гибкости бы не было. См. пример:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
animalNumber=0
function Animal(name, legs, horns) {
    this.name=name
    this.extremities=legs+horns
    this.getLegs=function() {return legs}
    this.getHorns=function() {return horns}
    animalNumber++
}
rabbit=new Animal("Rab", 4, 0)
cow=new Animal("Big", 4, 2)
alert(animalNumber) //2
alert(cow.extremities) //6
alert(rabbit.name) //Rab
alert(cow.getHorns()) //2
alert(rabbit.getLegs()) //4
Мы прибавляем единицу к глобальной переменной animalNumber, которая (как не трудно догадаться) содержит количество животных. С этим все понятно?
2
Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
05.03.2011, 02:02  [ТС] 9
Если в Яваскрипте нету классов, тогда когда я создаю объект, я создаю объект объекта получается?

Добавлено через 1 час 0 минут
Прочитал здесь: http://ru.wikipedia.org/wiki/%D0%9F%...BD%D0%B8%D0%B5

Код
В прототип-ориентированных системах предоставляется два метода 
создания нового объекта: клонирование существующего объекта,
 либо создание объекта «с нуля».
Получается написав так я объявил просто метод ТЕСТ со свойствами, но не класс?
Код
<script type="text/javascript">
function test(){
    this.a = "Чай";
    document.write(this.a);
}

var sssr = new test;
sssr.a;
</script>
Добавлено через 33 минуты
Здесь уточнить момент хотел.
Код
<script type="text/javascript">
function test(){  //Это создание метода с именем ТЕСТ, тоже самое что я создал объект ТЕСТ?
    this.a = "Чай"; 
    document.write(this.a);
}

/*Если свойство объекта - это тоже объект, получается "объект объекта".*/
//То есть sssr.a    свойство а - это объект?
var sssr = new test;
sssr.a;
</script>
Добавлено через 1 час 32 минуты
А если бы я просто объявил функцию со свойствами, но не создавал бы объекта, тогда вот это:
Javascript
1
2
3
4
function test(){
    this.a = "Чай";
    document.write(this.a);
}
означало бы создание объекта со свойствами?

Добавлено через 59 минут
Любое объявление любого объекта в JS - это конструктор?
Код
function test(){ 
    this.a = "Чай"; 
    document.write(this.a); 
}
Этот код - это описание конструктора test и одновременное его создание?
0
Hagrael
БТР - мой друг
331 / 273 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
05.03.2011, 06:10 10
Забудьте пока о прототипах. Любая функция может быть как конструктором, так и нет в зависимости от вызова (в JS вообще функции очень гибкие и интересные), а вызываться функция может как конструктор или нет. Вот пример:
Javascript
1
2
3
4
5
b=new test() //Функция вызвана, как конструктор, об этом свидетельствует слово new
alert(b.a) //Чай
b=test() //Функция вызвана, как обычная функция, и в b попадает то,
//что функция возвращает, а у тебя она ничего не должна возвращать =>
//b будет undefined
Тоесть функции не делятся на обычные и конструкторы, одна и та же функция может быть и тем, и тем.
Далее. В JS все является объектами, ярким примером тому служит следующий код:
Javascript
1
2
3
a=5
a=new Number(5)
a.b=10
Первые 2 строчки абсолютно эквивалентны, а значит, числовая переменная - это на самом деле объект класса Number. В 3-ей строчке мы присваиваем числовой переменной свойство! В других ЯП это вызвало бы ошибку, но не в нашем любимом JavaScript'e, который считает числовые переменные объектами и позволяет управлять их свойствами. Вы наверняка использовали функция toUpperCase, но не задумывались, что это метод строковой переменной, не так ли? То есть в JS все является объектами. Вы поняли все, что я вам выше написал?
1
05.03.2011, 06:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2011, 06:10

Выполняет ли браузер JavaScript скрипты если они в теге с css свойством display:none;
Прячу так некоторые счётчики. Вот думаю будут ли они выполняться если так...

Вставка элементов меню (содержащих javascript) через javascript
Пишу курсовой проект по JavaScript в ходе которого потребовалось создать...

Выполнение Javascript файла в котором присутствуют javascript теги
text1.js &lt;link...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru