Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从类调用方法而不实例化它?_Javascript_Oop - Fatal编程技术网

Javascript 如何从类调用方法而不实例化它?

Javascript 如何从类调用方法而不实例化它?,javascript,oop,Javascript,Oop,例如,如果您查看类似cocos2d-x的框架: cc.Sprite.extend(); 这里的精灵是一个阶级;如果不使用new关键字对其进行实例化,如何调用其中一个方法 例如,如果我有这个类: var superClass = function(){ this.init = function(){ console.log("new class constructed !") }; }; 要调用init,我必须执行以下操作: ob

例如,如果您查看类似cocos2d-x的框架:

cc.Sprite.extend();
这里的精灵是一个阶级;如果不使用
new
关键字对其进行实例化,如何调用其中一个方法

例如,如果我有这个类:

var superClass = function(){
    
    this.init = function(){
        console.log("new class constructed !")
    };

};
要调用
init
,我必须执行以下操作:

obj = new superClass();
obj.init();

但是我如何在不需要实例化类的情况下调用函数呢?

如果以这种方式分配方法,则在不实例化类的情况下将无法调用它,但可以通过扩展原型来实现这一点:

var superClass = function(){
};

superClass.prototype.init = function(){
    console.log("new class constructed !")
};

var obj = new superClass();
obj.init();
superClass.prototype.init();
ES6及更新版本: 使用关键字。它得到了支持

旧浏览器: 实现这一目标有不同的方法。一种选择是使用对象文字

对象文字

var superClass = {
    init: function(){
        console.log("new class constructed !")
    }
};

superClass.init();

但是,您仍然可以使用函数构造函数定义对象,然后向“类”添加静态方法。例如,您可以执行以下操作:

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
方法在
超类
实例对象中不可用,因为它不在对象原型中

扩展原型:

var SuperClass = function(){};

  SuperClass.prototype.init = function() {
      console.log("Init");
  };

SuperClass.prototype.init();

var sc = new SuperClass();
sc.init();


如果要从
超类
原型和对象实例访问函数
init
,此解决方案非常有用。

使用
超类
作为命名空间

superClass = {
    init: function() { 
    }
}
看看
superClass = {
    init: function() { 
    }
}