1
0
Fork 0
Commit Graph

146 Commits (6fd7ae8953c551da46f5784131b5aa130a9e96b7)

Author SHA1 Message Date
Mike Gerwitz 7bb87e370f No need to recheck the type each time 2011-03-04 00:24:42 -05:00
Mike Gerwitz ec7b4e2b6b Updated class module docblock 2011-03-04 00:17:25 -05:00
Mike Gerwitz 4148f8742d Merge branch 'master' into visibility/master
Conflicts:
	test/test-class-extend.js
2011-03-03 23:29:20 -05:00
Mike Gerwitz 81d03cb984 Altered class toString() representations to be more consistent with JS 2011-03-03 23:00:59 -05:00
Mike Gerwitz e2cba458d8 Class instances now have different default toString() implementations than uninstantiated classes
- Instance id is not yet included, as that is currently in a different branch
2011-03-03 22:53:20 -05:00
Mike Gerwitz 840a495017 Began implementing named classes
- toString() implementation
2011-03-03 22:33:18 -05:00
Mike Gerwitz d23ae6210c Initial implementation of natural class definition by invoking class module 2011-03-03 19:43:20 -05:00
Mike Gerwitz bc9e2bb7b2 Fix setting public properties
- This currently only works with ES5 engines
  - Fallback to follow so this will work with pre-ES5 engines
- As such, I do not recommend using this commit outside of ES5-compliant engines that work properly with getters/setters
  - This does NOT include IE8, as IE8 only works with getters/setters on DOM elements
2011-03-02 23:21:10 -05:00
Mike Gerwitz 74c2fc57c1 Initial implementation of protected members
- This was quite the pain in the ass
- There are additional considerations. I DO NOT recommend using this commit. Check out a later commit.
2011-03-02 20:43:24 -05:00
Mike Gerwitz 2af7bcf45d Merge branch 'master' into visibility/master 2011-03-02 07:54:52 -05:00
Mike Gerwitz e239352fc0 Resolved bug that was causing the system to think that Object prototype members were part of the abstract member list when attempting to define a method with the same name 2011-03-01 12:11:36 -05:00
Mike Gerwitz 38c16048cb Began adding protected/private member support
- No longer adding ANY properties to prototype
- protected/private members no longer part of the public access level
2011-01-27 22:35:40 -05:00
Mike Gerwitz 8c7ad787c8 Abstract methods list is no longer public 2011-01-25 00:24:50 -05:00
Mike Gerwitz fb5d541ea3 Removed old console.log 2011-01-25 00:23:56 -05:00
Mike Gerwitz fa8cddea07 Meta now uses deep cloning 2011-01-25 00:19:48 -05:00
Mike Gerwitz 881edc0cc6 Preparing to remove abstractMethods from public prototype; now uses hash for performance since it no longer needs to be referenced cleanly externally
- It will be later referenced via reflection
2011-01-25 00:13:47 -05:00
Mike Gerwitz 37e5b1d94d util.propCopy() no longer needed 2011-01-24 23:38:27 -05:00
Mike Gerwitz eba32ed4cb Beginning to move Class over to use member builders 2011-01-24 23:28:48 -05:00
Mike Gerwitz 5a3b401647 Began moving abstract logic out of propCopy 2011-01-24 20:58:58 -05:00
Mike Gerwitz f55def4f06 Preparing class to use member_builder 2011-01-21 00:03:41 -05:00
Mike Gerwitz afc5d4668d Abstract classes also have a more intuitive string representation 2011-01-17 20:22:30 -05:00
Mike Gerwitz d19638be4f Classes now return a more intuitive string representation 2011-01-17 20:20:39 -05:00
Mike Gerwitz 7fb0f6a820 Classes now contain implement() method 2011-01-10 19:56:09 -05:00
Mike Gerwitz ec9f24a926 Moved implement() into its own method, accepting destination object as the first parameter 2011-01-10 19:00:26 -05:00
Mike Gerwitz 3e8dba2fdc Added missing comma to variable list 2011-01-09 00:40:35 -05:00
Mike Gerwitz 56c13b757b isInstanceOf() now works with interfaces 2011-01-04 00:37:54 -05:00
Mike Gerwitz c3b00ab9b7 Encapsulating implemented list (can use isInstanceOf() or a future reflection API) 2011-01-03 23:41:45 -05:00
Mike Gerwitz 0b112dac51 Abstract method list is now updated for classes that implement interfaces 2011-01-03 23:25:27 -05:00
Mike Gerwitz c12ac412cb Class.{implements => implement} - like Class.extend(), we're looking for a verb 2010-12-30 09:54:53 -05:00
Mike Gerwitz d5d6082bfb Interface methods are now copied to the class prototype (basic implementation - no deep copy for interface subtypes yet) 2010-12-29 23:34:12 -05:00
Mike Gerwitz 459d5e967b Classes now store implemented interfaces in a list (does not yet import methods) 2010-12-29 23:33:30 -05:00
Mike Gerwitz ca71fc6296 Remove accidental attach of isInstanceOf() to Class 2010-12-29 22:45:47 -05:00
Mike Gerwitz 76969201fb Added isA() as an alias for isInstanceOf() 2010-12-29 21:37:11 -05:00
Mike Gerwitz 6a24f2ad13 Added isInstanceOf() partially applied function to class instances 2010-12-29 21:32:16 -05:00
Mike Gerwitz 96909732db Began adding isInstanceOf, starting with prototype chain checks 2010-12-29 21:13:21 -05:00
Mike Gerwitz 0103df3e71 Fixed self-invoking constructor issue in IE 2010-12-29 09:43:00 -05:00
Mike Gerwitz 38a6a4ee6a Added missing semi-colons that would otherwise be inserted via semicolon insertion 2010-12-28 22:10:12 -05:00
Mike Gerwitz 789f2390af All functions are now camelCase 2010-12-28 22:08:30 -05:00
Mike Gerwitz c9d0e027fa Added isClass() and isClassInstance() methods 2010-12-28 20:58:42 -05:00
Mike Gerwitz 44186068b4 Class constructors are now self-invoking
- Permits omitting 'new' keyword, which is a style preferred by some (such as Crockford)
- It's very difficult to use apply() with the 'new' keyword - this method permits a simple way of passing an argument list to the constructor
2010-12-28 19:05:53 -05:00
Mike Gerwitz e789e58000 Removed Class.abstractMethod in favor of property keyword 2010-12-27 22:11:37 -05:00
Mike Gerwitz f58586fc94 Added tests to ensure constructor is properly applied to subtypes 2010-12-23 15:57:45 -05:00
Mike Gerwitz cd9ef1ea71 Finished refactoring to remove result_data object in class extend() function 2010-12-19 13:54:31 -05:00
Mike Gerwitz 1ff9408885 Rearranged util.overrideMethod() arguments to match methodOverride propCopy() action (to avoid unnecessary mistakes and confusion) 2010-12-19 00:12:41 -05:00
Mike Gerwitz 600e389b40 Refactored abstract method logic out of util.propCopy() into class extend() 2010-12-19 00:11:39 -05:00
Mike Gerwitz 3a2ddbb29b class.js 'extending' var is an argument and shouldn't be declared with var keyword 2010-12-18 08:24:15 -05:00
Mike Gerwitz f2baf82100 Removed unneeded var 2010-12-18 06:59:35 -05:00
Mike Gerwitz 755b79725f Corrected attach_prop_init() documentation (__propInit => __initProps) 2010-12-16 23:56:35 -05:00
Mike Gerwitz a06d9a7204 Ensured __initProps() is treated as a reserved method and cannot be declared within Classes 2010-12-16 23:55:56 -05:00
Mike Gerwitz a60fe9c2de Class extend() now implements propCopy's performDefault (see previous commit) 2010-12-16 23:51:22 -05:00
Mike Gerwitz 591434b82f [*] Previous commit (property cloning per instance) now applied to subtypes as well 2010-12-16 23:37:18 -05:00
Mike Gerwitz fe853b505b [*] Properties are no longer shared between class instances
- Properties were previously shared on the prototype level, acting as though they were static class properties, which can cause some nasty bugs
2010-12-16 23:18:30 -05:00
Mike Gerwitz 729b977088 Fix of unintended global var 2010-12-03 07:19:16 -05:00
Mike Gerwitz 78e1913eb9 Comment spelling correction 2010-12-01 23:19:59 -05:00
Mike Gerwitz 54432c78fa abstractMethod() moved to util.defineAbstractMethod 2010-12-01 20:45:27 -05:00
Mike Gerwitz b3c4b757e7 util.canFreeze removed, replaced with util.freeze() 2010-12-01 20:41:54 -05:00
Mike Gerwitz c29bd010b0 define_secure_prop moved to util.defineSecureProp 2010-12-01 20:38:50 -05:00
Mike Gerwitz b294f84481 Began Interface development 2010-12-01 19:27:40 -05:00
Mike Gerwitz 1e2e73c9f0 Began moving utility methods into their own module 2010-11-15 23:44:15 -05:00
Mike Gerwitz 0e232b4a2c Freezing class object after creation 2010-11-15 23:22:24 -05:00
Mike Gerwitz f632b93d64 Refactored constructor creation logic for new classes into its own method and placed both functions (and their shared var) into a closure to remove the 'extending' var from the module's scope 2010-11-15 07:07:49 -05:00
Mike Gerwitz 095683ba42 Simply moved extend() function higher up in the source file, since it will be one of the most commonly referenced functions 2010-11-15 06:54:37 -05:00
Mike Gerwitz f9d7dca4b3 Removed old code from attach_extend() 2010-11-14 22:07:04 -05:00
Mike Gerwitz e26d7971ce Refactored abstract method logic 2010-11-14 22:03:55 -05:00
Mike Gerwitz 52944c4207 Grammar 2010-11-14 21:52:02 -05:00
Mike Gerwitz 3f169d87ea Refactored method override logic into its own function 2010-11-14 21:50:56 -05:00
Mike Gerwitz 1a9cc40c31 Refactored abstract method regeneration logic into a array_shrink() function 2010-11-14 21:39:46 -05:00
Mike Gerwitz d4593725a4 If a definition is provided for an abstract method, the concrete implementation must be compatiable (proper number of arguments) 2010-11-14 21:33:13 -05:00
Mike Gerwitz e0657e1c44 abstractFlag now defined using define_secure_prop() 2010-11-14 21:18:40 -05:00
Mike Gerwitz 0d1ba74415 Ensured abstract classes cannot be instantiated and permitted their instantiation during extending so that it may be used in the subclass's prototype 2010-11-14 20:48:39 -05:00
Mike Gerwitz 746a9ee53d Class.isAbstract() now defined using define_secure_prop 2010-11-14 20:31:23 -05:00
Mike Gerwitz 113e3b974f Properly implemented abstract methods list 2010-11-14 20:30:33 -05:00
Mike Gerwitz ad4b317955 Refactored defineProperty() code into define_secure_prop() function to reduce duplicate code 2010-11-14 01:37:12 -05:00
Mike Gerwitz d5b4477109 Abstract methods are now passed to subtypes 2010-11-14 01:18:49 -05:00
Mike Gerwitz de979d07f0 Added isAbstract() method to class 2010-11-14 01:10:55 -05:00
Mike Gerwitz 716db6d086 prop_copy() will now keep track of abstract methods 2010-11-14 01:02:57 -05:00
Mike Gerwitz e783713ca7 Added a result_data argment to prop_copy() 2010-11-14 00:56:54 -05:00
Mike Gerwitz 9dc025e6b1 Added setup_props function to prepare for adding multiple properties to generated classes 2010-11-14 00:49:52 -05:00
Mike Gerwitz a083313538 Began implementing abstract methods 2010-11-14 00:47:27 -05:00
Mike Gerwitz 16a91b728e Methods can no longer be overridden with non-methods (anything other than a Function) 2010-11-10 23:42:26 -05:00
Mike Gerwitz c34f40db19 Converted vars to conventional function delcarations (no difference; just preference) 2010-11-10 23:35:57 -05:00
Mike Gerwitz 4e38898c93 Added additional documentation to prop_copy() 2010-11-10 23:31:58 -05:00
Mike Gerwitz 60bf9deaf5 Moved class extend() export to the top of the module to make it more noticable in the mess of functions 2010-11-10 23:30:30 -05:00
Mike Gerwitz 86bbef6f77 Added documentation for attach_extend() 2010-11-10 23:29:28 -05:00
Mike Gerwitz 61985eea47 Added checks for ES5 features 2010-11-10 23:28:20 -05:00
Mike Gerwitz 8422bea1d6 Added getter/setter override support 2010-11-10 23:19:46 -05:00
Mike Gerwitz 0c963d1d00 Added access to parent prototype via parent property 2010-11-10 22:54:24 -05:00
Mike Gerwitz 607bbf7f4c Added support for _super method
- Motivation from John Reisg's "Simple Javascript Inheritance": http://ejohn.org/blog/simple-javascript-inheritance/
2010-11-10 22:49:27 -05:00
Mike Gerwitz 26b70bcd93 Changed license to LGPL
My reason for doing so is more practical - for the same reasons that GNU released glib and
other libraries under the LGPL. The reason is that there are so many other alternatives out
there that are released under more permissive licenses. This isn't anything special. Therefore,
to encourage its adoption, I've released it under the LGPL.

All my larger projects/libraries that have few/no alternatives will be released under the
GPL/AGPL.
2010-11-10 22:07:03 -05:00
Mike Gerwitz 909542d19b Added support for extending classes via convenience method and tests for property inheritance 2010-11-10 21:10:31 -05:00
Mike Gerwitz c42598c47b Class.extend() should not be part of the prototype (we're extending the class, not an object instance) 2010-11-10 21:05:52 -05:00
Mike Gerwitz 6a14b86777 Minor documentation changes 2010-11-10 20:45:33 -05:00
Mike Gerwitz 94835d290a Implemented constructor 2010-11-10 19:19:02 -05:00
Mike Gerwitz 1ee270883e Began implementing constructor (not yet operable - test will fail) 2010-11-10 19:02:52 -05:00
Mike Gerwitz 8d6c2645bc Began adding Class.extend() 2010-11-10 18:40:36 -05:00
Mike Gerwitz 979331cda3 Initial commit beginning to outline concept 2010-11-10 17:41:12 -05:00