 
			
				28.03.2012, 19:01
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Особый гость 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2012, 20:06
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2012, 21:13
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Тлен 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2010 
					
					
					
						Сообщений: 6,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Это нихрена не баг, а вполне себе фича.) 
		
	
		
		
		
		
		
			
				__________________ 
				29375, 35 
 
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2012, 21:24
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 '' 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.12.2011 
					
					
					
						Сообщений: 636
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 x15nicky, 
 Да вы язык кажется не понимаете, функция - это тоже переменная, поэтому нельзя создать одноимённы метод и свойство. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2012, 21:28
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 21.07.2011 
					
					
					
						Сообщений: 11
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		я это понимаю, и об этом писал выше. но всеж в PHP нет ограничений на имена ключей. в Руби - тоже. и если эта фича будет ликвидированна в будущих версиях, я думаю, никто о ней не пожалеет. 
кто-то из вас, господа гуру мне минусанул карму на 8 сотен. я на вашем месте счел бы в такой ситуации за честь ее вернуть.
 
	
 
	| 
		
			Сообщение от monolithed
			
		
	 | 
 
	| 
		Как минимум, переписать нормально код, без расширения базового типа.{
	 | 
 
	
 
 
	
 
	| 
		
			Сообщение от x15nicky
			
		
	 | 
 
	| 
		в особенности буду рад услышать, как же все-таки называется класс, который следует расширять вместо базового.
	 | 
 
	
 
 
	
 
	| 
		
			Сообщение от monolithed
			
		
	 | 
 
	| 
		Object.defineProperty(Object.prototype, 'dump', {
	 | 
 
	
 
  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2012, 23:07
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Особый гость 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.04.2010 
					
					
					
						Сообщений: 4,260
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Одноименное свойство можно только в прототип добавить: 
var object = {
    a: 1
};
object.__proto__.a = 2;
alert([object.a, object.__proto__.a]);
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				30.03.2012, 01:06
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.02.2008 
					
					
					
						Сообщений: 9,177
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Нет никаких хэшей в JavaScript-е, есть объекты, которые иногда называют хэшами, но это одно и то же. 
	
 
	| 
		
			Сообщение от x15nicky
			
		
	 | 
 
	| 
		но всеж в PHP нет ограничений на имена ключей. в Руби - тоже.
	 | 
 
	
 
 В JavaScript-е тоже нет ограничений на имена ключей.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.04.2012, 00:27
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 '' 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.12.2011 
					
					
					
						Сообщений: 636
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от x15nicky
			
		
	 | 
 
	| 
		но всеж в PHP нет ограничений на имена ключей. в Руби - тоже. и если эта фича будет ликвидированна в будущих версиях, я думаю, никто о ней не пожалеет
	 | 
 
	
 
 Я пожалею. И ещё, думаю, 95% js программистов
 
p.s. это не фича, а особенность языка  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |