16.02.2012, 14:26
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
Mахmахmахimus,
Class.staticProperty
var Class = function (value) {
this.value = value;
};
Class.staticProperty = 42;
Class.prototype = {
getAnswer: function () {
return Class.staticProperty + this.value;
}
};
var c = new Class(100500);
alert(c.getAnswer());
Но в настоящих классах можно и так и через this. То есть если ты напишешь this.staticProperty = 777, то и Class.staticProperty должно стать 777, без сеттеров не обойтись, причем это должно отразиться на всех инстансах (везде this.staticProperty должно стать 777), то есть надо будет еще хранить ссылки на все инстансы
МаксМаксМаксимус, лучше б ты время не тратил, это все незачем.. Зачем программировать на JS как на C ++? Это другой язык со своими особенностями. И даже если и получится у тебя разграничить права доступа к полям, надо еще чтоб наследование работало
Обычно хватает чего то типа:
Function.prototype.extend = function (prototype) {
if (typeof prototype !== "object") {
prototype = {};
}
var self = this, constructor = (prototype.hasOwnProperty("constructor") &&
typeof prototype.constructor === "function") ? prototype.constructor :
function () { self.apply(this, arguments); }, F = function () {}, property;
F.prototype = self.prototype;
constructor.prototype = new F();
for (property in prototype) if ( prototype.hasOwnProperty(property) ) {
constructor.prototype[property] = prototype[property];
}
constructor.prototype.constructor = constructor;
constructor.superclass = self.prototype;
return constructor;
}
__________________
readOnly
Последний раз редактировалось poorking, 16.02.2012 в 14:38.
|
|
16.02.2012, 14:51
|
Профессор
|
|
Регистрация: 10.02.2012
Сообщений: 254
|
|
Сообщение от poorking
|
без сеттеров не обойтись
|
я пока делаю считывание через this.name
а установку через this.static('name', 43)
потом сеттерами или проксями сделаю
Сообщение от poorking
|
Обычно хватает чего то типа:
|
Мне кажется это костыль, и еще я ни фига не понял тут, я делаю либу для удобства же. Чтобы люди которые привыкли к классам моли нормально работать.
Сообщение от poorking
|
Зачем программировать на JS как на C ++?
|
Потомоу что надоели ныть все. А еще это отточит мой скилл. И в третьих мне это интересно.
Сообщение от poorking
|
И даже если и получится у тебя разграничить права доступа к полям, надо еще чтоб наследование работало
|
Да, разумеется.
Слушай, а сеттеры и геттеры как динамически устанавливать, а не литерально, и второе, кто их поддерживает?
Вот такое обьявление класса удобно? И как бы хотелось тебе если бы ты сделал?
var Cat = Class(function() {
this.public({
w : function() {
alert(this.all)
}
})
this.public.static({
all : "общее публичное свойство"
})
this.private({
'bar' : 300
})
this.private.static({
'baz' : "общее приватное свойство"
})
})
Последний раз редактировалось Mахmахmахimus, 16.02.2012 в 14:58.
|
|
16.02.2012, 14:58
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
Mахmахmахimus,
Ну буду тебе врать, я с ними только для ознакомления работал, на практике не применяю.
Defining getters and setters
Но это не кроссбраузерно, хотя вроде как не сильно старые браузеры поддерждивают
__________________
readOnly
|
|
16.02.2012, 15:57
|
Профессор
|
|
Регистрация: 10.02.2012
Сообщений: 254
|
|
poorking,
Спасибо огромное, добавил сайт в закладки.
И последний вопрос, даже стыдно как-то, какие версии ECMA соответствуют каким версиям Javascript и какие версии javascript сейчас в последних версиях браузеров? Я даже не знаю как это гуглить.
|
|
16.02.2012, 16:04
|
Профессор
|
|
Регистрация: 10.02.2012
Сообщений: 254
|
|
poorking,
Спасибо, я тебя в авторство либы припишу
1.8 - Firefox
1.7 - Chrome 19 canary
1.5 - Opera
1.3 - IE9
и это на 1012 год!
Последний раз редактировалось Mахmахmахimus, 16.02.2012 в 16:11.
|
|
16.02.2012, 16:06
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
Mахmахmахimus,
__________________
readOnly
|
|
16.02.2012, 16:29
|
Профессор
|
|
Регистрация: 10.02.2012
Сообщений: 254
|
|
Короче я не буду поддерживать IE и плевать мне на все, это IE должен поддерживать javascript а не javascript должен поддерживать IE.
Я бы конечно мог сделать 2 версии одну с поддержкой IE и вот таким синтаксисом тупым, ноя не хочу, в любом случае в новой версии IE будет поддерживаться новый JS так что буду делать на будущее. А во вторых я под IE не верстаю че-то серьезное, даже на деньги.
|
|
16.02.2012, 19:08
|
Профессор
|
|
Регистрация: 10.02.2012
Сообщений: 254
|
|
poorking,
static public будут видны дочерним классам,
static private не будут видны дочерним классам, так?
|
|
16.02.2012, 19:17
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
Mахmахmахimus,
static поля не зависмы от контекста. Чтобы получить получить значение static поля или вызвать static метод, даже инстанцировать класс не нужно. public значит доступны везде и снаружи и внутри и всем потомкам. static private - значит доступны только внутри механизма класса, но также не зависимы от контекста. Гугл закрыли? ну хотя бы тут посмотри http://php.su/learnphp/phpoo/?php5
Ах, да, не забудь про перегрузку полей, и что потомки не могут сужать права доступа к полям, а только расширять.
Тебе будет грустно когда ты поймешь, что полноценные классы реализовать не получится.
__________________
readOnly
Последний раз редактировалось poorking, 16.02.2012 в 19:19.
|
|
|
|