Elegant inheritance, attributes and events, both for client-side and server-side JavaScript.
Elegant inheritance, attributes and events, both for client-side and server-side JavaScript.
Seed.js is a part of the fjs project. Seed.js is an abstract JavaScript Constructor, that would fullfill the following requirements :
Seed.extend
and the "+method"
convention help you inherit fast and easily, see Extend with Seed.js
options
keyword, see Manage attributes with 'options'
$ npm install seed-js
in your script add
require("Seed");
<script src="path/to/Seed.merged.js">
or
<script src="path/to/Seed.min.js">
You can use sandjs synhtax to write both client and server-side code. see sandjs for more informations on sand.js.
var S = sand.require("Seed/Seed", function(r){
var S = r.Seed;
/* code */
});
see How to require Seed.js for more ways to require Seed.js
var Fruit = S.extend({
options : {
// by default the fruit is Tasty
isTasty : true,
//and no one owns it
owner : null
},
// i like to taste any fruit
taste : function() {
console.log("I like to taste a fruit");
},
dump : function() {
return {
objectType : "a fruit"
}
}
});
var Banana = Fruit.extend({
// by default the banana is owned by a banana eater and is yellow
"+options" : {
owner : "banana eater",
color : "yellow"
},
// but the taste of the banana depends if it tasty
"+taste" : function() {
console.log(this.isTasty ? "GREAT!" : "beurk!");
},
"+dump" : function() {
return {
color : this.color
}
}
});
var oldBanana = new Banana({
isTasty : false,
color : "black",
owner : "me"
});
// options are set as attributes in the instance
oldBanana.isTasty
//=> false
// +taste in Banana is executed after taste in Fruit
oldBanana.taste();
// I like to test fruits
// beurk!
var favoriteBanana = new r.Banana();
favoriteBanana.taste();
// I like to test fruits
// GREAT!
favoriteBanana.dump();
//=> { color : "yellow", objectType : "a fruit"}
Seed.js is a package of 4 little Tools :
run tests
npm test
test uses sandcli and run on server-side with vowsjs sandcli provides a test command
By now documentation is inside the code and uses JSDoc synthax.
Add an issue if you find bugs or please