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; } |
Цитата:
а установку через this.static('name', 43) потом сеттерами или проксями сделаю Цитата:
Цитата:
Цитата:
Слушай, а сеттеры и геттеры как динамически устанавливать, а не литерально, и второе, кто их поддерживает? Вот такое обьявление класса удобно? И как бы хотелось тебе если бы ты сделал? 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,
Ну буду тебе врать, я с ними только для ознакомления работал, на практике не применяю. Defining getters and setters Но это не кроссбраузерно, хотя вроде как не сильно старые браузеры поддерждивают |
poorking,
Спасибо огромное, добавил сайт в закладки. И последний вопрос, даже стыдно как-то, какие версии ECMA соответствуют каким версиям Javascript и какие версии javascript сейчас в последних версиях браузеров? Я даже не знаю как это гуглить. |
Mахmахmахimus,
Определение версии JavaScript, поддерживаемой браузером А прям готовую таблицу не знаю где взять |
poorking,
Спасибо, я тебя в авторство либы припишу;) 1.8 - Firefox 1.7 - Chrome 19 canary 1.5 - Opera 1.3 - IE9 и это на 1012 год! |
Mахmахmахimus,
![]() |
Короче я не буду поддерживать IE и плевать мне на все, это IE должен поддерживать javascript а не javascript должен поддерживать IE.
Я бы конечно мог сделать 2 версии одну с поддержкой IE и вот таким синтаксисом тупым, ноя не хочу, в любом случае в новой версии IE будет поддерживаться новый JS так что буду делать на будущее. А во вторых я под IE не верстаю че-то серьезное, даже на деньги. |
poorking,
static public будут видны дочерним классам, static private не будут видны дочерним классам, так? |
Mахmахmахimus,
static поля не зависмы от контекста. Чтобы получить получить значение static поля или вызвать static метод, даже инстанцировать класс не нужно. public значит доступны везде и снаружи и внутри и всем потомкам. static private - значит доступны только внутри механизма класса, но также не зависимы от контекста. Гугл закрыли? ну хотя бы тут посмотри http://php.su/learnphp/phpoo/?php5 Ах, да, не забудь про перегрузку полей, и что потомки не могут сужать права доступа к полям, а только расширять. Тебе будет грустно когда ты поймешь, что полноценные классы реализовать не получится. |
Часовой пояс GMT +3, время: 21:37. |