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?
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();
Use superClass
as namespace.
superClass = {
init: function() {
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.