2015-05-24 6 views
3

я постараюсь, чтобы понять, как я могу , если смотреть рамки как cocos2d-х, напримервызов метода из класса без его экземпляра

cc.Sprite.extend(); 

Sprite здесь класс, как мы можем вызвать метод без создания экземпляра он с new ключевым словом

у меня есть класс, например

var superClass = function(){ 

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

}; 

называть Init я должен сделать это

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

, но как я могу ссылки на метод класса без создания экземпляра он

+0

Посмотрите на https://stackoverflow.com/questions/9170332/how-is-this-possible-without-instantiating-new-ing-it-var-a-array-prototy –

ответ

7

В принципе, вы хотите использовать статический метод. Существуют разные способы достижения этого. Я думаю, использование объектного литерала было бы проще для вас.

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

Если назначить метод таким образом, вы не сможете назвать его без instanciating класс, но вы можете добиться этого путем расширения прототип:

var superClass = function(){ 
}; 

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

var obj = new superClass(); 
obj.init(); 
superClass.prototype.init(); 
0

Используйте superClass как пространство имен.

superClass = { 
    init: function() { 
    } 
} 
Смежные вопросы