一个关于this指向而引发的血案。。。

在测试this指向的程序中,我写错了id对象,结果呢,居然也有效果,这真是超于我意料之外太多了,我以为自己写错了,结果一样可以用。。。。。。。

<div id="bbb">show</div>
<script>
// window.onload = function(){
// //
// var s = document.getElementById('bbb');
// s.onclick = showThis;//this == div#show
// bbb.onclick = function(){
// console.log(showThis);//返回的是定义showThis的内容
// showThis();//this = window
// }
// // showThis();//this = window
// }
// function showThis(){
// console.log(this);
// }
window.onload = function(){
//直接使用id的方式调用方法,ie7,8,9,10,11,都支持,只不过ie7都返回object,其他都是[object Window],[object HTMLDivElement]bbb
var s = document.getElementById('bbb');
s.onclick = showThis;//this == div#show
bbb.onclick = function(){
showThis();//this = window
alert(this+'bbb')
}
// showThis();//this = window
}
function showThis(){
alert(this);
}
</script>

做一点总结: window.onload = function(){

        //直接使用id的方式调用方法,ie7,8,9,10,11,都支持,只不过ie7都返回object,其他都是[object Window],[object HTMLDivElement]bbb
var s = document.getElementById('bbb');
console.log(s[onclick])
// s.onclick = showThis;//this == div#show
s.onclick = showThis;//实际上是把showThis的内容赋值给s.onclick,在未赋值前,s[onclick]为undifined
s.onclick = showThis();//实际上和showThis()一样,也没有返回值,这样的方式其实在onclick为赋值前,showThis已经执行了;
s.onclick = function(){//也是赋值,但是因为showThis是在外面定义的,所以showThis的this还是window
showThis()
}
s.onclick = function(){//相当于s.onclick = showThis;也是赋值
alert(this)
}
// s.onclick = showThis();
// bbb.onclick = function(){
// showThis();//this = window
// alert(this+'bbb')
// }
// showThis();//this = window
}
function showThis(e){
alert(this);
}

  

关于this的指向问题的更多相关文章

  1. C语言中 指向函数的指针 简介

    引子:在学习CPrimerPlus的第十四章的14.13节中,遇到了如下三行文字,是有关指向函数的指针的,把我搞晕了. char * fump(); //返回指向char的指针的函数 char (* ...

  2. JS this指向

    正常模式 在正常模式下独立函数的的 this 指向 undefined 或 window. <script type="text/javascript"> functi ...

  3. java多态性,父类引用指向子类对象

    父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new C ...

  4. 【javascript 技巧】谈谈setTimeout的作用域以及this的指向问题

    setTimeout的用法详见:http://www.w3school.com.cn/htmldom/met_win_settimeout.asp 是的,setTimeout的常见用法是让某个方法延迟 ...

  5. what's this? 浅谈js中this的指向问题

    刚刚学习js的朋友可能和我一样,看到代码中的this总是一脸懵逼,不知道this到底指向谁.经过一段时间的了解,我想跟大家分享下自己的理解. 何时出现this 函数在调用的时候,会自动获得两个特殊变量 ...

  6. EC笔记,第二部分:10.让=返回指向*this的引用

    Effective C++ 学习笔记 10 让=返回指向*this的引用 Table of Contents 1. 原因 2. 建议:在没有充分理由标新立异前,最好的做法是遵从传统. –by SkyF ...

  7. JavaScript中this指针指向的彻底理解

    this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 这一点与函数中自由变量Action-varibal不同 var ...

  8. JavaScript中this指向的简单理解

    首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...

  9. 12-返回指针的函数&&指向函数的指针

    前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针   一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...

  10. 彻底理解js中this的指向,不必硬背。

    首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...

随机推荐

  1. php中双$$与多$$

    <?php$a="b";$b="bbb";$c="ccc";echo $$a;?> 输出结果bbb $a的值为b $$a不是输出 ...

  2. mongodb安装服务

    一.准备工作 1:下载:  http://www.mongodb.org/downloads 2:解压到ZIP到 D:\Mongodb   ,在此目录下再建立2个目录  D:\Mongodb\db和D ...

  3. 了解JVM

    ---恢复内容开始--- Java对象在运行环境中,对于内存而言,存在三种状态:年轻代.年老代.永生代: 下图是JVM内存模型 1. 年轻代被分为3个部分:Enden区和两个Survivor区,垃圾回 ...

  4. jsp中的动作元素:<jsp:plugin>

    <jsp:plugin>用来产生客户端浏览器的特别标签(object或embed),可以使用它来插入Applet或JavaBean. 当jsp文件被编译把结果发给浏览器是,<jsp: ...

  5. with语句

    <script type="text/javascript"> /* with语句:有了 With 语句,在存取对象属性和调用方法时就不用重复指定对象. 格式: wit ...

  6. 大整数算法[10] Comba乘法(实现)

    ★ 引子 上一篇文章讲了 Comba 乘法的原理,这次来讲讲如何实现.为了方便移植和充分发挥不同平台下的性能,暂时用了三种不同的实现方式: 1.单双精度变量都有的情况. 2.只有单精度变量的情况. 3 ...

  7. Swift—Cocoa错误处理模式-备

    Swift错误处理模式,在Swift1.x和Swift 2.0是不同的两种模式. Swift 1.x代码错误处理模式采用Cocoa框架错误处理模式,到现在Objective-C还沿用这种处理模式,而S ...

  8. Linux下使用QQ的几种方式

    Linux下没有官方的QQ聊天应用,对于经常使用QQ与朋友同事沟通交流的小伙伴们来说肯定很不方便,在Linux下可以使用以下几种方法使用QQ:   1.wine qq for linux Ubuntu ...

  9. recovery编译汉化

    当BoardConfig.mk中定义了recovery的字体且为中文字体时,自动编译为中文版,否则编译为英文版 例如: BOARD_USE_CUSTOM_RECOVERY_FONT := \" ...

  10. JAVA多态示例

    这多态,我觉得是最利害的.在开发大型程序中. 但,也是需要经过足够多的实践经验才能随心利用的. class Quadrangle{ private Quadrangle[] qtest = new Q ...