我会尽力说清楚 如果你看一下像cocos2d-x这样的框架
cc.Sprite.extend();
这里的Sprite是类,我们可以调用方法而不用new
关键字
我有一个班级,例如
var superClass = function(){
this.init = function(){
console.log("new class constructed !")
};
};
调用init我必须这样做
obj = new superClass();
obj.init();
但是如何在不实例化的情况下引用类的方法
答案 0 :(得分:9)
基本上你想要的是静态方法。有不同的方法来实现这一目标。我认为,使用对象文字会更容易为你做。
对象litteral :
var superClass = {
init: function(){
console.log("new class constructed !")
}
};
superClass.init();
https://jsfiddle.net/ckgmb9fk/
但是,您仍然可以使用函数构造函数定义对象,然后将静态方法添加到“类”。例如,您可以这样做:
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();
注意,方法init
在SuperClass
实例对象中不可用,因为它不在对象原型中。
https://jsfiddle.net/mLxoh1qj/
扩展原型:
var SuperClass = function(){};
SuperClass.prototype.init = function() {
console.log("Init");
};
SuperClass.prototype.init();
var sc = new SuperClass();
sc.init();
https://jsfiddle.net/0ayct1ry/
如果要从init
原型和对象实例访问函数SuperClass
,此解决方案很有用。
<强> ES6:强>
这在ES6中更好
class SuperClass {
static init() {
console.log("new class constructed !")
}
}
SuperClass.init();
答案 1 :(得分:1)
如果你以这种方式分配方法,你将无法在没有实例化的情况下调用它,但你可以通过扩展原型来实现这一点:
var superClass = function(){
};
superClass.prototype.init = function(){
console.log("new class constructed !")
};
var obj = new superClass();
obj.init();
superClass.prototype.init();
答案 2 :(得分:0)
使用superClass
作为命名空间。
superClass = {
init: function() {
}
}