2013-03-11 2 views

ответ

2

Поскольку второй один оценивает this.method во время выполнения анонимной функции, в то время как первая делает эталонную копию чего-то, что еще не существует.

Это может сбивать с толку, потому что кажется, как write1 и write2 попытке использовать/ссылочный то, что еще не существует, но когда вы объявляете write2 вы создаете замыкание, которое на самом деле только копии информации ссылка на this, а затем выполняет тело функции позже, когда this был изменен путем добавления method

1

Это не работает, потому что вы ссылки this.method до того, как было объявлено. Изменить на:

function Stuff() { 

    this.write2 = function() {this.method();} 

    // First declare this.method, than this.write1. 
    this.method = function() { 
     alert("testmethod"); 
    } 
    this.write1 = this.method; 
} 
var stuff = new Stuff; 
stuff.write1(); 
+0

и почему ссылка работает в write2? –

+0

Поскольку в 'write2' ссылка на' this.method() 'вычисляется во время вызова' write2() ', в это время' this.method' уже определен. – kamituel

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