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