Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #51 (permalink)  
Старый 16.02.2012, 14:26
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 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.
Ответить с цитированием
  #52 (permalink)  
Старый 16.02.2012, 14:51
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 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.
Ответить с цитированием
  #53 (permalink)  
Старый 16.02.2012, 14:58
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Mахmахmахimus,
Ну буду тебе врать, я с ними только для ознакомления работал, на практике не применяю.
Defining getters and setters
Но это не кроссбраузерно, хотя вроде как не сильно старые браузеры поддерждивают
__________________
readOnly
Ответить с цитированием
  #54 (permalink)  
Старый 16.02.2012, 15:57
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

poorking,
Спасибо огромное, добавил сайт в закладки.
И последний вопрос, даже стыдно как-то, какие версии ECMA соответствуют каким версиям Javascript и какие версии javascript сейчас в последних версиях браузеров? Я даже не знаю как это гуглить.
Ответить с цитированием
  #55 (permalink)  
Старый 16.02.2012, 16:02
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Mахmахmахimus,
Определение версии JavaScript, поддерживаемой браузером
А прям готовую таблицу не знаю где взять
__________________
readOnly
Ответить с цитированием
  #56 (permalink)  
Старый 16.02.2012, 16:04
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 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.
Ответить с цитированием
  #57 (permalink)  
Старый 16.02.2012, 16:06
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Mахmахmахimus,
__________________
readOnly
Ответить с цитированием
  #58 (permalink)  
Старый 16.02.2012, 16:29
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

Короче я не буду поддерживать IE и плевать мне на все, это IE должен поддерживать javascript а не javascript должен поддерживать IE.

Я бы конечно мог сделать 2 версии одну с поддержкой IE и вот таким синтаксисом тупым, ноя не хочу, в любом случае в новой версии IE будет поддерживаться новый JS так что буду делать на будущее. А во вторых я под IE не верстаю че-то серьезное, даже на деньги.
Ответить с цитированием
  #59 (permalink)  
Старый 16.02.2012, 19:08
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

poorking,
static public будут видны дочерним классам,
static private не будут видны дочерним классам, так?
Ответить с цитированием
  #60 (permalink)  
Старый 16.02.2012, 19:17
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Javascript - классы, они есть или их нету в Javascript? Golovastik Javascript под браузер 39 15.02.2013 10:38
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
javascript вставки в vrml сцены. Передать событие из броузера Proletariy Javascript под браузер 0 10.05.2011 12:26
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34