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,590
|
|
Это нихрена не баг, а вполне себе фича.)
__________________
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. это не фича, а особенность языка
|
|
|
|