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?
Static Method Static methods are the methods in Java that can be called without creating an object of class.
In the same way that a static variable is associated with the class as a whole, so is a static method. In the same way that a static variable exists before an object of the class is instantiated, a static method can be called before instantiating an object.
This is not possible in java. You cannot call an method without an object.
In a Web API, a static method is one which is defined by an interface but can be called without instantiating an object of that type first.
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.
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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With