Reputation: 1018
If you look at a framework like cocos2d-x, for example:
cc.Sprite.extend();
Sprite here is a class; how can I call one of its methods without instantiating it with the new
keyword?
For example, if I have this class:
var superClass = function(){
this.init = function(){
console.log("new class constructed !")
};
};
To call init
, I must do this:
obj = new superClass();
obj.init();
But how can I call the function without needing to instantiate the class?
Upvotes: 21
Views: 18151
Reputation: 7912
Use the static
keyword. It's supported by most modern browsers.
class SuperClass {
static init() {
console.log("new class constructed !")
}
}
SuperClass.init();
There are different ways to achieve that. One option is to use an object literal.
Object literal:
var superClass = {
init: function(){
console.log("new class constructed !")
}
};
superClass.init();
https://jsfiddle.net/ckgmb9fk/
However, you can still define an object using a function constructor and then add a static method to the "class". For example, you can do this:
var SuperClass = function(){};
SuperClass.prototype.methodA = function() {
console.log("methodA");
};
SuperClass.init = function() {
console.log("Init function");
}
SuperClass.init();
var sc = new SuperClass();
sc.methodA();
Note that the method init
won't be available in the SuperClass
instance object because it is not in the object prototype.
https://jsfiddle.net/mLxoh1qj/
Extending prototype:
var SuperClass = function(){};
SuperClass.prototype.init = function() {
console.log("Init");
};
SuperClass.prototype.init();
var sc = new SuperClass();
sc.init();
https://jsfiddle.net/0ayct1ry/
This solution is useful if you want to access the function init
both from the SuperClass
prototype and from an object instance.
Upvotes: 29
Reputation: 2859
Use superClass
as namespace.
superClass = {
init: function() {
}
}
Upvotes: 0
Reputation: 6903
If you assign the method this way, you will not be able to call it without instanciating the class, but you can achieve this by extending the prototype:
var superClass = function(){
};
superClass.prototype.init = function(){
console.log("new class constructed !")
};
var obj = new superClass();
obj.init();
superClass.prototype.init();
Upvotes: 1