javascript - описание - jquery selector in element




jQuery/JavaScript «эта» путаница указателя (5)

Поведение «этого» при вызове функциональной bar меня озадачивает. См. Код ниже. Есть ли способ организовать «это» как простой старый экземпляр объекта js, когда bar вызывается из обработчика клика, а не является элементом html?

// a class with a method

function foo() {

    this.bar();  // when called here, "this" is the foo instance

    var barf = this.bar;
    barf();   // when called here, "this" is the global object

    // when called from a click, "this" is the html element
    $("#thing").after($("<div>click me</div>").click(barf));
}

foo.prototype.bar = function() {
    alert(this);
}

Вы можете использовать Function.apply для функции, чтобы установить, к чему this относится:

$("#thing").after($("<div>click me</div>").click(function() {
    barf.apply(document); // now this refers to the document
});


Есть хорошее объяснение по this ключевому слову в JavaScript, доступном на QuirksMode .


Получить книгу: JavaScript: хорошие детали.

Кроме того, прочитайте как можно больше Дугласом Крокфордом http://www.crockford.com/javascript/


this.bar();  // when called here, "this" is the foo instance

этот комментарий неверен, когда foo используется как нормальная функция, а не как конструктор. Вот:

foo();//this stands for window




this