2013-09-19 2 views
0

Привет мне нужно создать класс, который может установить свойства как функции в JS, что-то вроде этого:Pass функции к классу JavaScript с использованием структуры аннотацию

var myClass = { 

    myFunction: null, 

    otherFunction : function() 
    { 
     myFunction(); 
    } 
} 

function initPage() 
{ 
    myClass.myFunction = function() { ... } 
} 

Когда я хочу использовать использование MYFUNCTION, я могу напишите: myClass.otherFunction();

Возможно ли это?

+0

Почему бы вам не позвонить 'myFunction' напрямую? – thefourtheye

+0

Вы пробовали? –

+0

Возможно, но вам нужно 'this.myfunction()' в 'otherFunction'. http://jsfiddle.net/GhmUm/ – pawel

ответ

1

Вы должны использовать this, чтобы добраться до myFunction (который, в конце концов, это свойство объекта):

otherFunction : function() 
{ 
    this.myFunction(); 
} 

Что вы имеете в коде в вашем вопросе будет искать myFunction в ближайший доступный объем. Последнее, что он будет искать, - window.myFunction. Как это, это, вероятно, ошибка вне (потому что нет myFunction.

Опять же, разница в том, что myFunction будет искать контекстные переменные, в то время как this.myFunction рассмотрим свойства this, так же, как myClass.myFunction будут смотреть на свойства myClass (где myClass само по себе является областью действия переменной).

+0

Да, жаль, что я был неправ, чтобы написать сообщение, во всяком случае, когда я использую функцию, я получаю эту ошибку: ** Uncaught TypeError: Object # не имеет метода 'myFunction' ** Я думаю, что я не могу включить таможенную функцию в классе стоимость –

0

Если вы называете это как this.myFunction() он будет работать. Но чем выгода? что вы пытаетесь достичь?

Если вы хотите определить MyClass как нечто чтобы быть реалистичным, вы должны определить его так :

var myClass = function(){ 

    myFunction: null; 

    someFunction: function(){...}; 

    otherFunction : function() 
    { 
     this.myFunction(); 
    } 
} 

Затем экземпляр его как обычный объект JavaScript:

var myClassInstance = new myClass(); 

и вызывать его методы:

myClassInstance.someFunction(); 

таким образом, если вы хотите добавить новый метод к вашему объявление класса динамически, вы можете использовать свойство prototype вашего класса. Это ссылка на определение вашего класса, которое позволяет динамически изменять определение класса.

myClass.prototype.myFunction = function() { ... }; 

, а затем сразу позвоните по телефону myFunction.

myClassInstance.myFunction(); 

Для получения дополнительной информации об использовании концепции прототипа, посмотрите на этот ресурс:

Inheritance and The Prototype Chain

Смежные вопросы