2015-09-14 4 views
1

В моем примере ниже, на основании некоторых условий, я должен либо вызвать метод foo из моего класса, либо метод foo из alternative.js; Я назначаю метод в переменной myFunc и вызываю эту переменную, однако, если я хочу вызвать метод foo myClass, он ломается, потому что имя не определено в MyClass.prototype.myclass. Есть ли какое-нибудь обходное решение? Пожалуйста, дайте мне знать, если вам нужно больше разъяснений:Присвоение метода переменной в Javascript

MyClass.prototype.test = function(name) { 
     var myClass; 
     var myFunc; 
     shouldWork = true; 
     if(shouldWork){ 
      p = require('alternative.js') 
      myFunc = p['foo']; 
     }else{ 
      myClass= this.myclass(name); 
      myFunc = myClass['foo']; 

     } 

     myFunc('bar');// if "shouldWork" is true it works, but if it is false, it fails 
     //In other words, myClass.foo('bar') works but calling 
     //the variable which is set to myClass['foo'] 


    } 
    MyClass.prototype.myclass = function(name) { 
     // Here I do some operations on name and if it is undefined it breaks! 
     // name gets undefined if you foo method of myClass if you have it in 
     //a variable, becuse it is not assiging name which is from prototype 
    } 
+1

В вашем вопросе есть три разные капитализации 'myclass', которые действительно запутывают. Пожалуйста, не преднамеренно пишите код таким образом. Если это ошибка, то, пожалуйста, исправьте свой вопрос. Кроме того, у вас есть локальная переменная, называемая 'myclass', и свойство экземпляра, называемое' myclass'. Это снова действительно запутанный сценарий. Пожалуйста, дайте переменным очень описательные имена и не делайте несколько переменных очень похожими. – jfriend00

+0

jfriend00 Извините за это! Большое спасибо в любом случае :-) –

+0

Я буду помнить ваш совет ... Трудно было воспроизвести простой пример моей проблемы .... –

ответ

0

Вы можете использовать .bind() связать объект вызова метода. Например, если вы пытаетесь сохранить метод конкретного объекта в myFunc, то вы можете сделать это:

myFunc = myClass.foo.bind(myClass); 

Затем, когда вы позже сделать:

myFunc(...); 

он будет использовать ссылку на объект myClass, чтобы вызвать его как метод.

Для получения более подробной информации см. MDN reference on .bind().

+0

Человек, которого вы awesomeeeeeeeeeeeeeeeeeeee –

+0

Я просто тестирую больше, чтобы убедиться и Я помечаю это решение скоро –

+0

Спасибо миллион чувак !!!!!! –

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