javascript - 获取this的问题
怪我咯
怪我咯 2017-04-11 12:08:56
[JavaScript讨论组]

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


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

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

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(5)
黄舟

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

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

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

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

阿神

这个打出的是dom

<body>
    <p id="dom">dom</p>
  <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);
})
PHP中文网

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

PHPz

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

  1. 函数调用 this 为 window

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

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号