2014-07-13 2 views
1

Это может быть очень простой проблемой. Я все еще изучаю javascript и надеюсь, что смогу помочь в решении проблемы ниже.Метод жалобы Javascript не определен, если он действительно определен

var hello = function() 
{ 
    this.hey = function() 
    { 
     console.log("hey"); 
    } 
    function init() 
    { 
     this.hey(); 
    } 
    init(); 
} 
var h = new hello(); 

Приведенный выше код жалуется, что метод hey не определен. Но если я

var h = hello(); 

Он не давал каких-либо проблем.

Почему первый с новым, создающим объект, дал мне ошибку, а второй - нет? Мне нужно создать объект, поэтому мне нужно использовать новое ключевое слово. Как я могу устранить ошибку, которую я получил от первой?

+1

'this' не определен внутри' init'. –

+0

, как сказал @torazaburo, вам нужно сначала назначить 'this' переменной, чтобы вы могли вызвать ее внутри области' init' – royhowie

+0

. Связано: [JavaScript «это» ключевое слово] (http://stackoverflow.com/вопросы/3127429/JavaScript-это-ключевое слово) –

ответ

1

Когда вы звоните hello метод с new, это создаст новый экземпляр hellofunction/class и вы получите this в контексте hello function.

var hello = function() { 
    // this is an instance of hello class 
    this.hey = function() { 
     console.log("hey"); 
    } 

    var _this = this; // creating this context of hello 
    function init() { 
     // this is a context of window here 
     //this.hey(); // throws an error 
     _this.hey(); // will execute 
    } 
    init(); 
} 
var h = new hello(); // create a new instance/object of hello 

В то время как, когда вы просто называть его как функцию hello(), вы получите window контекст внутри hello function.

var hello = function() { 
    // this is a context of window here 
    this.hey = function() { 
     console.log("hey"); 
    } 

    function init() { 
     // this is a context of window here 
     this.hey(); // will execute 
    } 
    init(); 
} 
var h = hello(); // calling a hello function 

JSFIDDLE ДЕМО: http://jsfiddle.net/8QN7W/

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