2017-02-21 6 views
0

Я довольно новый для JavaScript, и преобразование некоторого (очень старый) кода на что-то немного более современное и рефакторинг, и я в конечном итоге с чем-то вроде этогоJavascript вызова функции-члена из внутри функции члена

var MyClass = function(parms} {/*stuff*/} 
MyClass.prototype = { 
    this_func(p1, p2) { /* do this */ }, 
    that_func(args) { /* do that */ } 
}; 

примечание У меня нет ключевого слова ES6 class, но я хотел бы перейти к его использованию, как только он станет доступным для меня.

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

that_func(args) { 
    //this.this_func(parm1, parm2) causes an error 
    myClass.prototype.this_func.call(this, parm1, parm2); 
} 

Есть ли более простой способ сделать это? И когда я получу полный es6, я просто смогу использовать this.this_func?

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

Разъяснение - класс используется как этот

var myInstance = new MyClass(); 
myInstance.that_func('xxx'); 

и я получаю ошибку о this_func не известно (я не могу вспомнить, на данный момент, из-за того, чтобы быть далеко от кода в вопросе прямо сейчас)

+1

Вы должны иметь возможность использовать 'this.this_func' прямо сейчас. Вот как это должно работать –

+0

Однако, я думаю, вы объявляете неправильные прототипы. Не могли бы вы показать фактический код? –

+0

Вот как это сработало с тех пор, как у brendan был мальчик –

ответ

0

this относится к текущим пример. Если класс был правильно создан с помощью new MyClass(...), цепочка прототипов настраивается автоматически, это цель объекта prototype.

Это должно быть

MyClass.prototype = { 
    this_func(p1, p2) {...}, 
    that_func(args) { 
     this.this_func(...); 
    } 
}; 

Если вы не имеете класс ключевое слово ES6 доступны ", Бабель может быть использован для transpile ES6 код ES5. Для этого это и есть.

+0

да, и это дает ошибку, когда я вызываю this_func, поэтому я разместил вопрос –

+0

Нет, [это не] (https://jsfiddle.net/dbkjeetL/). – estus

0

Ну, я нашел его после многократного добавления следов и регистрации. Сегодня я обнаружил, что если у вас есть функция внутри другой функции, значение this изменяется внутри этой внутренней функции, поэтому оно не относится к экземпляру «class» в некотором смысле (сбив с толку при переходе с фона C++).

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