Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 28.03.2012, 19:01
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

var object = {
    a: 1,
    b: 2, 
    c: {
        d: 3
    }
};

Object.defineProperty(Object.prototype, 'dump', {
    value : function() {
        var output = [];
		
		for (var i in this) {
			if (this.hasOwnProperty(i)) 
			{
				var key = i + "=";
				var value = this[i];
				
				output.push(key += {
				   "[object Object]" : value.dump(),
				   "[string Object]" : "\"" + value + "\""
				}[Object.prototype.toString.call(value)] || value);
			}
		}
		return "{" + output.join() + "}";
	},
    configurable: 1,
	writable : 0,
    enumerable: 0
});

alert(object.dump());

Последний раз редактировалось monolithed, 28.03.2012 в 23:00.
Ответить с цитированием
  #12 (permalink)  
Старый 28.03.2012, 20:06
Интересующийся
Отправить личное сообщение для x15nicky Посмотреть профиль Найти все сообщения от x15nicky
 
Регистрация: 21.07.2011
Сообщений: 11

за код - спасибо. про defineProperty по крайней мере - не знал.

но не знаю, мож я плохо объясняю. у меня нет проблем с функцией, которая делает это:
Цитата:
{a:1, b:2, s:3}.k_string() => 'a=1 b=2 c=3'
там 6 строчек, включая скобки. вложенных массивов в моем конкретном случае не будет.

проблема, повторю еще раз, в том, что, похоже, что нет возможности использовать одновременно ключ хеша и одноименную функцию:
console.log({a:1, b:2, dump: 3}.dump());

Цитата:
Uncaught exception: TypeError: '{a:1, b:2, dump: 3}.dump' is not a function

Error thrown at line 54, column 0 in http://ifube.us/js/ifube.js?v=0.06:
console.log({a:1, b:2, dump: 3}.dump());
и эта проблема - как видите, осталась, как бы ни был прекрасен (без иронии говорю) джаваскрипт в остальном. это относится, кстати и к встроенным функциям, типа toString.

Последний раз редактировалось x15nicky, 28.03.2012 в 20:09.
Ответить с цитированием
  #13 (permalink)  
Старый 28.03.2012, 21:13
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Это нихрена не баг, а вполне себе фича.)
__________________
29375, 35
Ответить с цитированием
  #14 (permalink)  
Старый 28.03.2012, 21:24
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

x15nicky,
Да вы язык кажется не понимаете, функция - это тоже переменная, поэтому нельзя создать одноимённы метод и свойство.
Ответить с цитированием
  #15 (permalink)  
Старый 28.03.2012, 21:28
Интересующийся
Отправить личное сообщение для x15nicky Посмотреть профиль Найти все сообщения от x15nicky
 
Регистрация: 21.07.2011
Сообщений: 11

я это понимаю, и об этом писал выше. но всеж в PHP нет ограничений на имена ключей. в Руби - тоже. и если эта фича будет ликвидированна в будущих версиях, я думаю, никто о ней не пожалеет.

кто-то из вас, господа гуру мне минусанул карму на 8 сотен. я на вашем месте счел бы в такой ситуации за честь ее вернуть.

Сообщение от monolithed
Как минимум, переписать нормально код, без расширения базового типа.{
Сообщение от x15nicky
в особенности буду рад услышать, как же все-таки называется класс, который следует расширять вместо базового.
Сообщение от monolithed
Object.defineProperty(Object.prototype, 'dump', {
Ответить с цитированием
  #16 (permalink)  
Старый 28.03.2012, 23:07
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Одноименное свойство можно только в прототип добавить:
var object = {
    a: 1
};

object.__proto__.a = 2;
alert([object.a, object.__proto__.a]);
Ответить с цитированием
  #17 (permalink)  
Старый 30.03.2012, 01:06
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Нет никаких хэшей в JavaScript-е, есть объекты, которые иногда называют хэшами, но это одно и то же.

Сообщение от x15nicky
но всеж в PHP нет ограничений на имена ключей. в Руби - тоже.
В JavaScript-е тоже нет ограничений на имена ключей.
Ответить с цитированием
  #18 (permalink)  
Старый 08.04.2012, 00:27
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от x15nicky
но всеж в PHP нет ограничений на имена ключей. в Руби - тоже. и если эта фича будет ликвидированна в будущих версиях, я думаю, никто о ней не пожалеет
Я пожалею. И ещё, думаю, 95% js программистов

p.s. это не фича, а особенность языка
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
Кол-во элементов в списке kodermax Общие вопросы Javascript 2 21.10.2008 18:12