2012-04-26 4 views
3

(К сожалению, еще один this вопрос в JavaScript.)Что означает «это» в javascript ниже?

У меня есть код, приведенный ниже, и мне интересно, что «это» представляет в вызове в end-- окне или птица?

var Bird = (function() { 
    Bird.name = 'Bird'; 

    function Bird(name) { 
     this.name = name; 
    } 

    Bird.prototype.move = function (feet) { 
     return alert(this.name + (" flew" + feet + "ft.")); 
    }; 

    return Bird; 

}).call(this); 
+1

Я проверил это в противном случае пустым сценарием, добавив параметр x в функцию и предупреждение (x) внутри вызова - это ** не определено **. – delicateLatticeworkFever

+2

@ goldilocks Это не работает. Когда вы используете 'call', первый аргумент - это контекст/область, в которой вы выполняете, он не передается в качестве параметра функции. Чтобы проверить, что вы предлагаете правильно, попробуйте '(function() {console.log (this);}). Call (this);'. Если вы хотите увидеть аргумент, попробуйте '(function (arg) {console.log (this, arg);}). Call (this, this);'. Оба этих теста показывают, что это «окно». – Matt

+0

jsПримечание моего примера: http://jsfiddle.net/Umseu/1 – Matt

ответ

7

Ну, если предположить, что не будет никакой родитель сфера, это window

EDIT: Смотрите пример: http://jsfiddle.net/Umseu/1

+0

Спасибо Мэтт. Кстати, есть ли у вас предложения по вставке кода в проводку, чтобы форматирование выполнялось? Я заметил, что вы изменили мою часть - это нормально, но когда я вложил ее в отступы, все испортили, и мне пришлось использовать пробелы, чтобы заставить их работать правильно. – larryq

+0

@larryq Если вы копируете из редактора, возможно, это проблема использования вкладок (\ t) вместо пробелов для отступа? Не уверен. Для быстрой очистки JS я просто перехожу к http://jsbeautifier.org/, и это то, что я сделал для вашего. – Matt

+0

Цените наконечник, Мэтт. – larryq

5

Вероятно window, потому что это не в любом конкретном контексте, который дал бы this специального значения.

3

окно. .call(this) не написано внутри птицы. Он просто вызывает анонимную функцию, которая возвращает конструктор «Bird».

1

Звоните console.log(this) на первой линии в анонимной функции. Это возвращает область, window.

+0

Внутри какой функции? В коде есть три функции, и некоторые из них будут фактически ссылаться на Птицу. Вызов console.log (это); после того, как код выше скажет ответ. –

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