Почему свойство `this` не может получить доступ внутри функции - PullRequest
0 голосов
/ 19 февраля 2019

Проблема

Я работаю над плагином jQuery.При вызове с $.fn.bar() alert () внутри foo () не выводит ожидаемый результат.Где я допустил ошибку?

(function($){

  var input;

  var foo = function(){
    alert(this.input); //<-- Not getting the desire input value
  }

  $.fn.bar = function(){

    this.input = "Test";

    alert(this.input); //<-- Output "Test" as expected
    foo(); //<-- Call foo(), expect to alert "Test" as well, but not

  };


}(jQuery));

Решение

Вам необходимо передать контекст this в bar() в foo() с foo.call(this).

https://jsfiddle.net/clintonlam/de1vz59w/8/

1 Ответ

0 голосов
/ 19 февраля 2019

Вам следует .call функция foo, где this находится внутри bar, чтобы контекст вызова bar передавался в foo:

var foo = function() {
  console.log('foo', this.input);
};
$.fn.bar = function() {
  this.input = "Test";
  console.log('bar', this.input);
  foo.call(this);
};

$().bar();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...