From 33577aae0ccdc441e40fab0a945d831805cc8148 Mon Sep 17 00:00:00 2001 From: James Halliday Date: Sat, 11 Sep 2010 14:27:54 -0800 Subject: [PATCH] better compatability fallbacks for ff, maybe ie --- lib/hash.js | 59 ++++++++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/lib/hash.js b/lib/hash.js index 7a0af90..a13882d 100644 --- a/lib/hash.js +++ b/lib/hash.js @@ -25,7 +25,6 @@ function Hash (hash, xs) { Object.keys(hash).forEach(function (key) { f.call(self, hash[key], key); }); - memoized = {}; return self; }, filter : function (f) { @@ -55,7 +54,6 @@ function Hash (hash, xs) { Object.keys(h).forEach(function (key) { hash[key] = h[key]; }); - memoized = {}; return self; }, merge : function (h) { @@ -74,7 +72,6 @@ function Hash (hash, xs) { }, tap : function (f) { f.call(self, hash); - memoized = {}; return self; }, extract : function (keys) { @@ -88,34 +85,36 @@ function Hash (hash, xs) { items : hash }; - Object.defineProperty(self, 'keys', { get : function () { - return Object.keys(hash); - } }); - - Object.defineProperty(self, 'values', { get : function () { - return Object.keys(hash) - .map(function (key) { return hash[key] }); - } }); - - Object.defineProperty(self, 'compact', { get : function () { - return self.filter(function (x) { return x !== undefined }); - } }); - - Object.defineProperty(self, 'clone', { get : function () { - return Hash(Hash.clone(hash)); - } }); - - Object.defineProperty(self, 'copy', { get : function () { - return Hash(Hash.copy(hash)); - } }); - - Object.defineProperty(self, 'length', { get : function () { - return Object.keys(hash).length; - } }); + var props = { + keys : function () { return Object.keys(hash) }, + values : function () { + return Object.keys(hash).map(function (key) { return hash[key] }); + }, + compact : function () { + return self.filter(function (x) { return x !== undefined }); + }, + clone : function () { return Hash(Hash.clone(hash)) }, + copy : function () { return Hash(Hash.copy(hash)) }, + length : function () { return Object.keys(hash).length }, + size : function () { return self.length } + }; - Object.defineProperty(self, 'size', { get : function () { - return self.length; - } }); + if (self.__defineGetter__) { + for (var key in props) { + self.__defineGetter__(key, props[key]); + } + } + else if (Object.defineProperty) { + for (var key in props) { + Object.defineProperty(self, key, { get : props[key] }); + } + } + else { + // non-lazy version for browsers that suck >_< + for (var key in props) { + self[key] = prop(); + } + } return self; }; diff --git a/package.json b/package.json index bf4096b..95cecd8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name" : "traverse", - "version" : "0.2.0", + "version" : "0.2.1", "description" : "Traverse and transform objects by visiting every node on a recursive walk.", "author" : "James Halliday", "license" : "MIT/X11",