问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

javascript里的this用法指正

提问网友 发布时间:2022-04-21 01:07
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2022-04-18 02:40

<style>

div {
    background-color:black;
    width:50px;
    height:50px;
    margin:20px;
}
.state1 {
    background-color:blue;
}
.state2 {
    background-color:red;
}

</style>

<script>

function Test(div) {
    this.counter = true;
    this.div = div;
    var _this = this;
    
    //this.div.onclick=_this.onclick();    <-----问题在这
    
    this.div.onclick = function () {
        _this.onclick.call(_this);
    };
};
Test.prototype.onclick = function() {
    if(this.counter){
        this.div.className = "state1";
    }
    else {
        this.div.className = "state2";
    }
    this.counter = !this.counter;
};
window.onload = function() {
    var oDiv1 = document.getElementById("div1");
    var oDiv2 = document.getElementById("div2");
    var ot1 = new Test(oDiv1);
    var ot2 = new Test(oDiv2);
};

</script>


根据你的意图,你的代码应该有2处需要用到this,一个是构造函数,一个是onclick的绑定事件函数:

    构造函数内this指向实例;   

    绑定事件函数this指向触发事件的dom;


但是实际上你的代码有三处用到了this。

    构造函数内this指向实例;

    原型成员函数this指向实例;

    绑定事件函数this指向触发事件的dom;


所以代码产生了一些多余的现象(2个div都变蓝),让你的概念稍微混乱了一下。

之所以会触发原型成员函数是因为你在注释行:this.div.onclick=_this.onclick(); 出现了问题。

使用onclick绑定事件函数的用法是:[object Element].onclick = [object Function];

比如:document.getElementById('ele').onclick = clickFunction; function clickFunction(){};

所以你需要赋值的是一个函数: _this.onclick;

而不是一个函数调用: _this.onclick(); 这个在以后写代码需要注意。


点击无效果的原因也是上述原因,为事件绑定一个函数,触发事件的时候会调用函数;

然后你赋值的是一个函数调用 =>> 函数调用会返回一个返回值,无返回值则返回undefined =>> 触发事件的时候没有检测到函数 =>> 自然后不执行任何代码 =>> 所以点击无效果


之所以需要多一个function,然后执行call,是因为你的Test.prototype.onclick需要用到实例的其他属性。那么this则需要指向实例而不是触发事件的dom元素。但是绑定事件函数的this一定指向dom元素,所以需要多一个function处理this指向dom,调用Test.prototype.onclick的时候需要通过call强行指向实例。


完毕。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

相关推荐
  • JavaScript中this绑定方式总结

    JavaScript中this绑定方式总结

    JavaScript中this绑定方式总结:最近在回顾js的一些基础知识,把《你不知道的js》系列又看了一遍,this始终是重中之重,还是决定把this相关知识做一个系统的总结,也方便自己日后回顾。this的四条绑定规则1.默认绑定这是最常用的函数调用类型:独立函数调用(即函数是直接使用不带任何修饰的
    查看详情
  • Javascriptthis的一些学习总结

    Javascriptthis的一些学习总结

    Javascriptthis的一些学习总结:1.1.1 摘要相信有C/C++、C#或Java等编程经验的各位,对于this关键字再熟悉不过了。由于Javascript是一种面向对象的编程语言,它和C/C++、C#或Java一样都包含this关键字,接下来我们将向大家介绍Javascript中的this关键字。1.1.2 正文由于许多面
    查看详情
  • JavaScript中函数的调用和this的指向介绍(代码)

    JavaScript中函数的调用和this的指向介绍(代码)

    JavaScript中函数的调用和this的指向介绍(代码):本篇文章给大家带来的内容是关于JavaScript中函数的调用和this的指向介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。函数的调用和this的指向1.普通函数调用 this 指向 windowfunction fn() { console.log
    查看详情
js中this代表什么意思? 理解Javascript中this是什么1 JAVAscript里面this的用法谁能举个例子啊 Javascript中“this” 的作用? javascript自定义对象中this的用法 javascript中this的意思 如何更好的理解js中的this,分享2段有意思的代 js当中this什么用法 如何理解 JavaScript 中的 this 关键字 javascript中的this到底指什么? JavaScript脚本中的this用法详细诠释? 怎么把金山毒霸卸载了 我删除也删除不了啊 金山毒霸企业版5.2卸载需要密码,如何才能卸载? 怎样完全卸载金山毒霸?卸载不了金山毒镖? 金山毒霸如何卸载 怎样才能完全的卸载金山毒霸 金山毒霸怎么卸载 金山毒霸卸载的方法 正确卸载金山毒霸的步骤 如何卸载金山毒霸软件? 安装了企业版,客户端上金山毒霸软件卸载方法! 鲁刚的《老厂》 歌词 javascript中各个地方的this指什么 JS中this关键字的解释 JavaScript 函数作用域 this javascript什么意思 如何排查C1下的网络环路? 防狼喷雾能过机场安检吗? 上飞机出国 可以带防狼喷雾吗 你好,防狼喷雾真的能带上飞机吗? 什么东西可以作防身利器又可以带上飞机? 防狼喷雾剂 能带上飞机吗? 老师,您好,我有几个问题想请教您 防狼喷雾60毫升,坐飞机可以放在行李箱里托运吗 防狼喷雾可以上飞机吗? 有什么防身用品可以带上飞机? 防狼报警器不能带上飞机么 要去欧洲旅游了 能将防狼报警器带出国吗 能过安检吗 在机场带了防狼喷雾,被罚款1000这是为什么 防狼喷雾管用吗? 防狼手电筒电击棒电棒可以上飞机吗?
Top