Классы js...
Доброго времени суток!
Почему плохо говорят про зайцев, прототипное наследование? Типо в js нет классов... Да но только на уровне языка, а так они легко эмулируются, следовательно классы есть, результат то на выходе один. Тем более в экма 6. Я понимаю что это все та же цепочка прототипов, эмулирующая классы, но синтаксис нормальный, что еще нужно??? Мне кажется или тут вопрос скорее философский?:) |
Просто для многих главным признаком наличия классов в языке является наличие ключевого слова class :) А вообще полезно задать себе вопрос: "а что есть класс?", и выянится, что в JavaScript есть классы, просто их реализация немного отличается от реализации скажем в Java. Как раз для таких людей и добавили в следующем стандарте новую "сахарную" обёртку. Лично я использую слово "класс" в отношении JS и ещё ни разу не встречал человека, который бы не понял, что я имею ввиду, но зато встречал много тех, кто на макросе начинал кричать: "в JS нет классов, нуб!".
|
Если Винни Пух сказал, что это мед, значит это мед :)
|
Цитата:
|
Цитата:
|
Цитата:
var __class = function() {
this.static = 1;
}
new __class().static;
|
monolithed,
дык это не статический метод, ты уже создаешь экземпляр класса и получаешь свойство у созданного экземпляра, что уже является не статическим свойством. |
Цитата:
function Foo() {
this.bar = 1;
}
function Bar() {
this.bar = 2;
// обращение к методам/свойствам родительского класса
alert(Object.getPrototypeOf(this).bar);
}
Bar.prototype = new Foo();
new Bar();
|
Нормальный синтаксис че ;)
<script type="text/javascript" src="https://github.com/devote/jsClasses/raw/master/class.js"></script>
<script type="text/javascript">
// выглядят статические методы "классов" в JS
var Foo = Class({
static: 1
}, {
fooMethod: function() {
alert('foo');
}
});
alert(Foo.static);
// обращение к методам родительского класса
var Bar = Class({
method: function() {
alert('Я родитель че');
}
});
var Baz = Class(Bar, {
method: function() {
this.parent.method();
alert('Я НЕ родитель че');
}
});
new Baz().method();
// а также множественное наследование
var Zaz = Class([Foo, Baz], {
zazMethod: function() {
alert('zaz');
}
});
var inst = new Zaz();
inst.fooMethod();
inst.method();
inst.zazMethod();
</script>
|
devote, а как у тебя передаётся контекст вызова родительскому методу при перекрытии в дочернем? Ведь если написать:
this.parent.method.call(this); То выполнение метода уйдёт в рекурсии при наследовании выше второго уровня: superParent > parent > child и т.д. Или у тебя за ширмой реализации скрыта какая то магия?) |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
var __class = function() {};
__class.static = 1;
|
var __class = function() {};
__class.static = 1;
alert((new __class()).static)
|
Цитата:
var __class = function() {};
__class.static = __class.prototype.static = 1;
alert((new __class()).static)
alert(__class.static);
|
Вот она, красота синтаксиса :)
|
Цитата:
#include <iostream>
#include <memory>
class __class {
public:
static const int property = 1;
};
int main() {
std::unique_ptr<__class> instance(new __class);
std::cout << instance->property + __class::property << std::endl;
return 0;
}
Ну ничё, ES6 уже почти готов |
function Cat (){}
Cat.static =
Cat.prototype.public =
Cat.prototype._private =
|
А я всё ждал, когда же появится максимус в этой теме :)
|
![]() ![]() How have you been? |
| Часовой пояс GMT +3, время: 13:56. |