|
Вопросы и замечание про JS
|
|
| Бармалей | Дата: 12 Июля 2009, 19:32 | Сообщение # 21 | ● ● ● ● ● Тиран 7772 сообщения Статус: Offline | Создать собственный класс, который будет в некотором внутреннем свойстве хранить значение.Code function myClass(n){ this.value = n||0; this.toString = function(){return this.value}; this.x2 = function(){this.value = this.value*2}; }
e = new myClass(5); e.x2(); alert(e); // → 10 Кстати, я ошибался - toNumber здесь не нужен, JS автоматически приведет строку к числовому типу (получаем Объект → Строка → Число). Это - вполне рабочий код для первого варианта, правда с другой реализацией. P.S. Попробовал перезагрузить стандартный класс - ничего путного не вышло, работает только с new Number(). P.P.S. Для полноценной работы надо бы еще что-то вроде __defineSetter__ прикрутить, но он вроде только для свойств.
 | | |
|
| Dem0nity | Дата: 12 Июля 2009, 19:35 | Сообщение # 22 | ● ● ● ● ● 62 сообщения Статус: Offline | Quote (NecroProger) Dem0nity, в том то и дело - если параметр - не объект, то свойство не установится, и наоборот в другом случае. попробуй Code alert(typeof 'qwe')
и
alert(typeof String) new String = function, 'qwe' = string; function — object  | | |
|
| Бармалей | Дата: 12 Июля 2009, 19:37 | Сообщение # 23 | ● ● ● ● ● Тиран 7772 сообщения Статус: Offline | Quote (Dem0nity) Бармалей, а так интересно:  Вот только работать не будет. Нужно хотя бы такВот что-то вроде такого и хотелось создать.
 | | |
|
| Dem0nity | Отредактировал Dem0nity - Воскресенье, 12 Июля 2009, 19:38 Дата: 12 Июля 2009, 19:38 | Сообщение # 24 | ● ● ● ● ● 62 сообщения Статус: Offline | Бармалей, а зачем Code this.toString = function(){return this.value}; | | |
|
| Бармалей | Дата: 12 Июля 2009, 19:41 | Сообщение # 25 | ● ● ● ● ● Тиран 7772 сообщения Статус: Offline | Dem0nity, выполните и Code alert({key:'value',toString:function(){return 'key: '+this.key}}) и сравните результаты.
 | | |
|
| Dem0nity | Дата: 12 Июля 2009, 19:42 | Сообщение # 26 | ● ● ● ● ● 62 сообщения Статус: Offline | Quote (Бармалей) Вот только работать не будет. точно...Добавлено (12 Июль 2009, 19:42) ---------------------------------------------
Quote (Бармалей) и сравните результаты. не знал  | | |
|
| NecroProger | Дата: 12 Июля 2009, 19:53 | Сообщение # 27 |  ● ● ● ● ● 1024 сообщения Статус: Offline | Quote (Бармалей) Создать собственный класс, который будет в некотором внутреннем свойстве хранить значение. Понял. Dem0nity, Quote (Dem0nity) new String = function Не new String, а new String(). Не понял, что Вы хотели этим сказать. | | |
|
| Бармалей | Дата: 12 Июля 2009, 19:56 | Сообщение # 28 | ● ● ● ● ● Тиран 7772 сообщения Статус: Offline | Quote (NecroProger) Не new String, а new String(). Оба случая идентичны. Пустые скобки можно опускать.
 | | |
|
| NecroProger | Дата: 12 Июля 2009, 20:00 | Сообщение # 29 |  ● ● ● ● ● 1024 сообщения Статус: Offline | Бармалей, да? В случае с оператором new? | | |
|
| Бармалей | Дата: 12 Июля 2009, 20:06 | Сообщение # 30 | ● ● ● ● ● Тиран 7772 сообщения Статус: Offline | Да. String и String() будут различны.
 | | |
|
| Dem0nity | Отредактировал Dem0nity - Воскресенье, 12 Июля 2009, 20:11 Дата: 12 Июля 2009, 20:09 | Сообщение # 31 | ● ● ● ● ● 62 сообщения Статус: Offline | NecroProger, new String() — String — String(), потому что new String() — класс, String или String() — функция которая делает новый объект. Запутался.  | | |
|
| Бармалей | Дата: 12 Июля 2009, 20:11 | Сообщение # 32 | ● ● ● ● ● Тиран 7772 сообщения Статус: Offline | new String() создает объект. String() создает строку String - ссылка на функцию-класс.
 | | |
|
| Dem0nity | Дата: 12 Июля 2009, 20:14 | Сообщение # 33 | ● ● ● ● ● 62 сообщения Статус: Offline | Quote (NecroProger) 3. Интересная особенность JS. Оказывается, JS не полностью строится на объектах. Определим такую функицю, которая коряво, но всё же - определяет, объект ли параметр: new Test() — класс, объект, typeof new Test() — object typeof 123 — number, typeof '123' — string | | |
|
| NecroProger | Отредактировал NecroProger - Воскресенье, 12 Июля 2009, 23:48 Дата: 12 Июля 2009, 23:43 | Сообщение # 34 |  ● ● ● ● ● 1024 сообщения Статус: Offline | Оказывается, я не первооткрыватель. То, что скалярные типы - не объекты в JS описано здесь. Вообще, почитайте статью - маленькая, а есть полезная инфа. | | |
|