2017-02-08 14 views
1

Проверьте мой код ниже, я просто потерялся здесь, почему я получаю эту ошибку. Любое предложение пожалуйста. Здесь я сделал тест класса и добавил два метода check и nextfn. Я вызываю чек из nextfn.Невозможно вызвать метод из другого метода в Javascript

var test=function(){} 

test.prototype.check=function() 
{ 
    console.log("hello from checking"); 
} 

test.prototype.nextFn=function(){ 

    check(); 

    console.log("Hello from nextfn"); 
} 

Следующая

var t=new test(); 
t.nextfn(); 

Ошибка

Uncaught ReferenceError: check is not defined(…) 

Теперь рассмотрим другой сценарий;

test.prototype.anotherFn=function() 
{ 
    var p=new Promise(function(){ 
     this.check(); 
    }) 
} 

Теперь также возникает такая же ошибка;

Uncaught ReferenceError: check is not defined(…) 

При вызове

var t=new test(); 
t.anotherFn(); 
+4

'this.check();' – Igor

+2

Кроме того, ' new test() 'вместо' new text() ' – Blazemonger

+0

, чтобы развернуть комментарий @Igor, метод проверки был помещен на прототипе теста. 'nextFn' является частью одного и того же прототипа,' this' является ключевым словом, ссылающимся на родительский/прототип. – flybear

ответ

4

check функция находится на prototype от test объекта.

При вызове nextFn так:

t.nextfn(); 

Последовавшая сфера будет привязан к t экземпляру «типа» test. Доступ к прототипу nextfn до test будет доступен через this.

Так доступ check с помощью this:

this.check(); 

Этот материал может получить удивительно запутанным. Хорошая ссылка: this book.

====

Для вашего второго scenerio, проблема заключается в том, что вы пытаетесь вызвать this из функции, которая имеет собственную область видимости.

Сфера применения в JavaScript, как правило, не является блочным областью, а скорее функцией областью. Существует много больше, и я рекомендую прочитать учебник по закрытий, чтобы получить более округлый описание, но сейчас, попробуйте вместо этого:

test.prototype.anotherFn=function() 
{ 
    var self = this; // save reference to current scope 
    var p=new Promise(function(){ 
     self.check(); // use self rather than this 
    }) 
} 
+0

Хорошо работает, теперь добавлен еще один сценарий в моем вопросе; не могли бы вы прояснить это, пожалуйста, также. Я понимаю, что теперь он идет в область p. Но как вызвать функцию проверки? –

+0

@KOUSIKMANDAL Я обновил свой ответ для второй части вопроса –

+0

Большое спасибо. Прекрасно работает. :) –