cc.extend
A simple class creation system allowing methods, attributes and access to super methods from classes.
installation
To install globally:
sudo npm install -g cc.extend
usage
cc.extend - class inheritance
var Animal = cc// same: var Animal = cc.Class.extend({})
constructors and methods
cc.extend adds ".extend" as an instance method of the returned class which can be used to simplify subclassing:
var Cat = Animal
attributes and calling super methods
"this.parent" can be used in a method to call the parent version of that method if it exists. Non-function values in an extend object become class attributes.
var HouseCat = Cat // construction of the housecat will log 'cat'var animal = isTrue = animal instanceof Animal animal // logs "friendly cat: meow", "hiss(mose)"
note on copying of attributes
When a new object is constructed all attributes of type Object are deep cloned from the prototype into the new object unless:
- They are HTML Elements.
- They are an instance of cc.Class.
Objects of the following class would be copied into attributes of newly constructed classes:
var Animal = cc
The following object would be referenced in attributes due to being an instance of cc.Class.
var Animal = ccClass
using inject to modify a class in place
cc.extend returns a new child class whilst cc.inject can be used to modify a class. Inside of a method overridden with cc.inject, "this.parent" refers to the overridden method.
// a class created with cc.extend also gets a static "inject" method.HouseCat animal // logs "prr prr", "friendly cat: meow", "hiss(kit)", "prr"
using with cc.loader
// file lib/project/Cat.js// creates class accessible via "project.Cat"cc
// file lib/project/HouseCat.js// requires lib/project/Cat.js file and sets project.Cat as parent of project.HouseCatccparent'project.Cat'
testing
% git clone git://github.com/nuisanceofcats/cc.extend.git
% cd cc.extend
% npm test
cc.extend test server listening on: 8013
please go to http://localhost:8013/
faq
- The API is a (mainly) compatible rewrite and extension of ImpactJS' class system. The technical details are explained here.