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()); |
за код - спасибо. про defineProperty по крайней мере - не знал.
но не знаю, мож я плохо объясняю. у меня нет проблем с функцией, которая делает это: Цитата:
проблема, повторю еще раз, в том, что, похоже, что нет возможности использовать одновременно ключ хеша и одноименную функцию: console.log({a:1, b:2, dump: 3}.dump()); Цитата:
|
Это нихрена не баг, а вполне себе фича.)
|
x15nicky,
Да вы язык кажется не понимаете, функция - это тоже переменная, поэтому нельзя создать одноимённы метод и свойство. |
я это понимаю, и об этом писал выше. но всеж в PHP нет ограничений на имена ключей. в Руби - тоже. и если эта фича будет ликвидированна в будущих версиях, я думаю, никто о ней не пожалеет.
кто-то из вас, господа гуру мне минусанул карму на 8 сотен. я на вашем месте счел бы в такой ситуации за честь ее вернуть. Цитата:
Цитата:
Цитата:
|
Одноименное свойство можно только в прототип добавить:
var object = { a: 1 }; object.__proto__.a = 2; alert([object.a, object.__proto__.a]); |
Нет никаких хэшей в JavaScript-е, есть объекты, которые иногда называют хэшами, но это одно и то же.
Цитата:
|
Цитата:
p.s. это не фича, а особенность языка |
Часовой пояс GMT +3, время: 02:51. |