public
Description: Implementation of the core of Ruby's object system in JavaScript.
Homepage: http://jsclass.jcoglan.com
Clone URL: git://github.com/jcoglan/js.class.git
js.class / CHANGELOG
100644 217 lines (138 sloc) 6.346 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
Version 2.1.0
June 8 2009
================================================================
 
* New libraries: ConstantScope, Hash, HashSet.
 
* Improved package manager, supports parallel downloads in
  web browsers and now also works on server-side platforms
  (tested on SpiderMonkey, Rhino and V8). Also supports custom
  loader functions for integration with Google, YUI etc.
 
* Enumerable updated with Ruby 1.9 methods, enumerators, and
  Symbol#to_proc functionality when passing strings to iterators.
  Any object with a toFunction() method can be used as an iterator.
  Search methods now use equals() where possible.
 
* ObjectMethods module is now called Kernel.
 
* New Kernel methods: tap(), equals(), hash(), enumFor() and methods(),
  and new Module methods: instanceMethods() and match().
 
* The double inclusion problem is now fixed, i.e. the following
  works in JS.Class 2.1:
  
      A = new JS.Module();
      C = new JS.Class({ include: A });
      B = new JS.Module({ foo: function() { return 'B#foo' } });
      A.include(B);
      D = new JS.Class({ include: A });
 
      new C().foo() // -> 'B#foo'
      new D().foo() // -> 'B#foo'
  
  (See http://eigenclass.org/hiki/The+double+inclusion+problem)
 
* Ancestor and method lookups are cached for improved performance.
 
* Automatic generation of displayName on methods for integration
  with the WebKit debugger.
 
* API change: Set#classify now returns a Hash, not an Object.
 
* PDoc documentation for the core classes.
 
 
Version 1.6.3
March 4 2009
================================================================
 
* Fixes a bug caused by Function#prototype becoming a non-
  enumerable property in Safari 4, causing classes to inherit
  from themselves and leading to stack overflows.
 
 
Version 2.0.2
October 1 2008
================================================================
 
* The function returned by object.method('callSuper') now behaves
  correctly when called after the containing method has returned.
 
 
Version 1.6.2
October 1 2008
================================================================
 
* Fixes some bugs to make various forEach() methods more robust.
 
 
Version 2.0.1
September 14 2008
================================================================
 
* Fixes a super()-related bug in Command.
 
* Better handling of 'include' and 'extend' directives such
  that these are processed before all the other methods are
  added. This allows mixins to override parts of the including
  class to affect future method definitions.
 
* Module#include() has been fixed so that overriding it produces
  more sane behaviour with respect to classes that delegate to
  a module behind the scenes to store methods.
 
 
Version 2.0.0
August 12 2008
================================================================
 
* Complete rewrite of the core, including a proper implementation
  of Modules with all inheritance semantics based around this.
  Ruby-style multiple inheritance now works correctly, and
  callSuper() can call methods from mixins.
 
* Class and Module are now classes, and must be created using
  the 'new' keyword.
 
* Some backward compatibility breaks; see http://jsclass.jcoglan.com/upgrade.html
 
* New method: Object#__eigen__() returns an object's metaclass.
 
* Performance of super() calls is much improved.
 
* New libraries: Package, Set, SortedSet and StackTrace.
 
* Package provides a dependency-aware system for loading new
  JavaScript files on demand.
 
 
Version 1.6.1
April 17 2008
================================================================
 
* Fixes bug in Decorator and Proxy.Virtual caused by the 'klass'
  property being treated as a method and delegated.
 
 
Version 1.6.0
April 10 2008
================================================================
 
* Adds a DSL for defining classes in a more Ruby-like way using
  procedures rather than declarations (experimental).
 
* New libraries: Forwardable, State.
 
* The extended() hook is now supported.
 
* The 'implement' directive is no longer supported.
 
 
Version 1.5.0
February 25 2008
================================================================
 
* Adds a standard library, including Command, Comparable,
  Decorator, Enumerable, LinkedList, MethodChain, Observable
  and Proxy.Virtual.
 
* Renames _super() to callSuper() to avoid problems with PackR's
  private variable shrinking.
 
* Adds an Object#wait() method that calls a MethodChain on the
  object using setTimeout().
 
 
Version 1.0.1
January 14 2008
================================================================
 
* Memoizes calls to Object#method() so that the same function
  object is returned each time.
 
 
Version 1.0.0
January 4 2008
================================================================
 
* Singleton methods that call super() are now supported.
 
* Object#is_a() has been renamed to Object#isA().
 
* Classes now support inherited() and included() hooks.
 
* Adds Interface class for easier duck-typing checks across
  several methods.
 
* New directive 'implement' can be used to check that a class
  implements some interfaces.
 
* Singletons are now supported as class-like definitions that
  yield a single object.
 
* Module has been added as a way to protect sets of methods by
  wrapping them in a closure.
 
* Removes the bindMethods class flag in favour of the more
  efficient and Ruby-like Ojbect#method(). This can also be
  used on classes to get bound class methods.
 
* Exceptions thrown while calling super are no longer swallowed
  inside the framework.
 
* Class#method() is now Class#instanceMethod.
 
 
Version 0.9.2
November 13 2007
================================================================
 
* Fixes bug caused by multiple methods in the same call stack
  clobbering _super().
 
* Fixes some inheritance bugs related to class methods and
  built-in instance methods.
 
* Improves performance by bootstrapping JavaScript's prototypes
  for instance method inheritance.
 
* Allows inheritance from non-JS.Class-based classes.
 
 
Version 0.9.1
November 12 2007
================================================================
 
* Improves performance by checking whether methods use _super()
  and only wrapping where necessary.
 
 
Version 0.9.0
November 11 2007
================================================================
 
* Initial release. Features single inheritance and _super().