Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Classy offers the ability to easily define classes, call super or overriden methods, define static properties, and mixin objects in a very flexible way.
Meant to be used in the browser and in node.js as well.
Use dist/classy.js
var Vehicle = classy.define({
alias: 'vehicle',
init: function(year){
this.year = year
}
})
var Car = classy.define({
extend: 'vehicle'
//or extend: Vechicle
alias: 'car',
init: function(year, make){
this.callSuper()
this.make = make
},
getName: function(){
return this.make
}
})
var ford = new Car(1980, 'Ford')
console.log(ford.year)
console.log(ford.make)
Notice the callSuper()
method call, which can be used in any class method, and will call the method with the same name found on the super class. It also automatically transmits all the arguments it has, so you don't have to manually do so.
ford.getName() === 'Ford' //is true
classy.override('car', {
getName: function(){
return this.callOverriden() + ', made in ' + this.year
}
})
//now
ford.getName() === 'Ford, made in 1980' //is true
You can use the class alias
in order to easily reference which class you want to extend or override. This also helps you get a reference to your class by
var Car = classy.getClass('car')
var Vehicle = classy.getClass('vehicle')
init
as constructorUse the init
method as the constructor
Example
var Animal = classy.define({
//when a new Animal is created, the init method is called
init: function(config){
config = config || {}
//we simply copy all the keys onto this
Object.keys(config).forEach(function(key){
this[key] = config[key]
}, this)
}
})
var Cat = classy.define({
extend: Animal,
alias: 'cat',
init: function(){
this.callSuper()
this.sound = 'meow'
},
getName: function(){
return this.name
}
})
var lizzy = new Cat({ name: 'lizzy' })
callSuper
and callOverriden
Use the callSuper
and callOverriden
methods to call the super and overriden methods. You don't have to worry about forwarding the arguments, since this is handled automagically for you.
If there is no super or overriden method with the same name you don't have to worry either, since callSuper and callOverriden won't break. they will simply and silently do nothing
Example
//create a shape class
classy.define({
alias: 'shape',
getDescription: function(){
return this.name
}
})
//create a rectangle class with a width and a height
classy.define({
extend: 'shape',
alias: 'rectangle',
name: 'rectangle',
init: function(size){
this.width = size.width
this.height = size.height
},
getArea: function(){
return this.width * this.height
},
setHeight: function(h){ this.height = h },
setWidth: function(w){ this.width = w }
})
classy.override('rectangle', {
getDescription: function(){
//reimplement the getDescription, but use the overriden implementation as well
return 'this is a ' + this.callOverriden()
}
})
//create a square class
classy.define({
extend: 'rectangle',
alias: 'square',
init: function(size){
if (size * 1 == size){
//the size is a number
size = { width: size, height: size}
} else {
size.width = size.height
}
this.callSuper()
},
setHeight: function(h){
//callSuper will automatically pass the arguments to Rectangle.setHeight, so h will be forwarded
this.callSuper() //or you could use this.callSuperWith(10) if you want to manually pass parameters
this.setWidth(h)
}
})
You can also use callSuperWith
and callOverridenWith
to manually pass all parameters
Example
//...
setHeight: function(h){
this.callSuperWith(h*2)
}
//...
$ownClass
You can easily define static properties for classes.
var Widget = classy.define({
statics: {
idSeed: 0,
getDescription: function(){
return 'A Widget class'
},
getNextId: function(){
return this.idSeed++
}
},
init: function(){
this.id = this.$ownClass.getNextId()
}
})
Widget.getDescription() == 'A Widget class' // === true
var w = new Widget()
w.id === 0
w = new Widget()
w.id === 1
On every instance, you can use the $ownClass property in order to get a reference to the class that created the instance.
FAQs
Classy - Classes for JavaScript
The npm package classy receives a total of 16 weekly downloads. As such, classy popularity was classified as not popular.
We found that classy demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.