Javascript, передавая это функциям - PullRequest
3 голосов
/ 24 марта 2019

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

$(".search-result").each(function() {
    var x  = $(this).find('.past-positions ol').children()
    console.log(x)
    //this prints as expected
    pastJobs(this)
    // this does not
})

function pastJobs() {
    var x  = $(this).find('.past-positions ol').children()
    console.log(x)
    // this prints as undefined
}

Я предполагаю, что возможно передать this функциям, но я не думаю, что делаю это правильно.

Что я делаю не так?

Ответы [ 3 ]

5 голосов
/ 24 марта 2019

Попробуйте pastJobs.call(this) вместо.

1 голос
/ 24 марта 2019

pastJobs(this) вы передаете this в качестве аргумента и ваша функция не принимает аргументы function pastJobs().так что $(this) в pastJobs действительно вне контекста.

вы можете вызвать функцию .call(this) / .apply(this) или bind() и затем вызвать ее.(bind только привязывает этот объект, но в отличие от apply или call не вызывает функцию.

имейте в виду, что call и apply принимают аргументы после this объекта другим способом. call() метод принимает аргументы отдельно. apply() метод принимает аргументы в виде массива.

вам нужно что-то вроде

$(".search-result").each(function() {
    var x  = $(this).find('.past-positions ol').children()
    console.log(x)
    //this prints as expected
    pastJobs.call(this);
    // this does not
})
1 голос
/ 24 марта 2019

На самом деле, здесь pastJobs(this) вы передаете лексический контекст this как параметр, а не привязываете этот контекст к функции.

Вы можете использовать функцию bind для достижения желаемого:

pastJobs.bind(this)()
...