为什么 `this` 属性 无法在函数内访问

Why `this` property cannot access within function

问题

我正在开发 jQuery 插件。当使用 $.fn.bar() 调用时,foo() 中的 alert() 未输出预期结果。我哪里做错了?

(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));

解决方案

您需要使用 foo.call(this).

bar() 中的上下文 this 传递给 foo()

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

你应该 .call foo 函数与任何 thisbar 中,这样 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>