获取this的问题

问题是这样:我想写一个组件方法,方法中定义了this。当不同的按钮点击时调用这个方法,this都能指向这个按钮,然后获取到按钮的一些属性。然而事实是不管怎么调用this都指向了window,也想到调用这个方法时候把this作为参数传进去可以解决,但是总觉得不太妥。代码大概是这样子:


var scale=function(){
    var that=$(this);
    console.log(that)
};
$(".btn").on("click",function(){
      scale();//这里想要函数中的this指向这个".btn"
})

请各位大侠指导下~小白在此万分感谢

阅读 3k
5 个回答

函数当做函数调用的时候, 内部 this 要么指向window, 要么是 undefinded(严格模式),
你那样写, 明显就是函数调用, 理所当然的就是指向 window 啦.

当函数被注册成事件处理器的时候, 函数内部的 this 是指向发生事件的 DOM 节点.
所以, 直接这样

$(".btn").on("click", scale)

就可以了.
也可以参考其他回答, 用 bind, call, apply 绑定 this .

这个打出的是dom

<body>
    <div id="dom">dom</div>
  <script>
    const dom = document.getElementById('dom');
    dom.addEventListener("click", function () {
      console.log(this)
    })
  </script>
</body>
var scale = function() {

    var that = $(this);
    console.log(that)
};
$(".btn").on("click", function() {

    //scale(); //这里想要函数中的this指向这个".btn"
    scale.call(this);
})
新手上路,请多包涵

var 创建里全局变量,然后function就指向了全局,所以this就是全局的。
on绑定的对象是btn,所以这里的this就是指向了btn。
作用域要多查查看看就好,this这个东西在做封装插件的时候经常用到的。
具体可以看看搜搜看,这里就不打太多了

this 是动态改变的,按情况可以分为

  1. 函数调用 this 为 window

  2. 对象方法调用 this 为该对象

  3. new构造函数调用 this 为 构造函数默认返回的对象(如果手动返回一个对象就会覆盖该对象)

  4. bind,call,apply 调用 this 为绑定的对象。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题