<!--JavaScript伪协议和内联事件对于this的指向不同-->
<a href="#" onclick="alert(this.tagName);">click me</a><!--弹出A-->
<a href="javascript:alert(this.tagName);">click me</a><!--弹出undefined-->
<a href="javascript:alert(this==window);">click me</a><!--弹出true--> <input id="btn" type="button" value="this demo" name="button"/>
<script type="text/javascript">

        var name = 'somebody';
var angela = {
name: 'angela',
say: function () {
alert("I'm " + this.name);
}
};
var btn = document.getElementById('btn'); //setTimeout和setInterval也会改变this的指向
/*
angela.say();//I'm angela
setTimeout(angela.say, 1000);//I'm somebody
setInterval(angela.say, 1000);//I'm somebody
*/ //on...也会改变this的指向
/*
angela.say();//I'm angela
btn.onclick = angela.say;//I'm button
*/ //匿名函数调整this指向
setTimeout(function () { angela.say(); }, 1000);//I'm angela
setInterval(function () { angela.say(); }, 1000)//I'm angela
btn.onclick = function () { angela.say(); };//I'm angela
setTimeout(function () { alert(this == window); }, 1000);//true
btn.onclick = function () { alert(this == btn); }//true //call 和 apply调整this的指向
angela.say.call(btn);//I'm button
setTimeout(function () { angela.say.call(btn); }, 1000);//I'm button
setTimeout(function () { angela.say.apply(btn); }, 1000);//I'm button
btn.onclick = function () { angela.say.apply(btn); }//I'm button //将this指向的对象保存到变量
var name = 'migo';
var mydemo = {
name: 'angela',
say: function () {
alert("I'm " + this.name);
},
init: function () {
var that = this;
document.getElementById('btn').onclick = function () {
that.say();//I'm angela
this.say();//这儿报错 this.say is not function
}
}
};
</script>

JavaScript中this的一些怪异现象的更多相关文章

  1. JavaScript中的百变大咖~this

    原文链接:http://www.jeffjade.com/2015/08/03/2015-08-03-javascript-this/ JavaScript作为一种脚本语言身份的存在,因此被很多人认为 ...

  2. JavaScript中一些怪异用法的理解

    引言 JavaScript这门语言有些场合的用法还是比较怪异的.这篇文章会尽量将这门语言特有的一些比较特殊的用法收集在一起.就当是平时开发时需要注意的地方吧. 特殊用法收集 1.!!用法 在JavaS ...

  3. delphi 字符串处理中的怪异现象与处理

    1, 怪异现象:字符串相加操作不正常! 以上代码,明显输出字符串应含有后缀“.jpg”,但实际输出却不含后缀(如下),字符串加法操作似乎不起作用了! 采用showMessage进行输出,看看结果如何? ...

  4. javascript中变量提升的理解

    网上找了两个经典的例子 var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); // 10 var ...

  5. 【转】十个JavaScript中易犯的小错误,你中了几枪?

    目录 常见错误一:对于this关键词的不正确引用 常见错误二:传统编程语言的生命周期误区 常见错误三:内存泄露 常见错误四:比较运算符 常见错误五:低效的DOM操作 常见错误6:在for循环中的不正确 ...

  6. 关于javascript中apply()和call()方法的区别

    如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可理喻.如果在学JavaScript这自由而变幻无穷的语 ...

  7. 你所不了解的float(滥用float的怪异现象)

    float设计初衷就是为了实现文字环绕效果 原本页面流布局显示如上图所示,运用了float属性后就显示为如下图所示,这就是浮动的设计初衷 float的一些特性:包裹性.破坏性. 包裹的特性其实主要有三 ...

  8. JavaScript中的作用域

    很多(JavaScript)开发者都在讨论"作用域",但它是什么?它们在JavaScript中的任何地方!我发现很多年轻的开发者不知道作用域是什么.他们中大多数人可以用jQuery ...

  9. 深入理解Javascript中this, prototype, constructor

    在Javascript面向对象编程中经常需要使用到this,prototype和constructor这3个关键字. 1.首先介绍一下this的使用:this表示当前对象;如果在全局中使用this,则 ...

随机推荐

  1. JavaScript对UNIX时间戳的转换

    <script type="text/javascript"> var timestamp = '1479886513'; var d = new Date(times ...

  2. linux环境下安装mongodb

    最近有用到mongodb,顺便找到了以前的指南,顺便写一篇随笔,以后或许有用到的地方. 第一步:下载mongodb的linux版本,mongodb-linux-x86_64-3.2.4.tgz(去官网 ...

  3. 关于L'Hopital法则

    1.首先需要使用 罗尔定理 函数f(x)在闭区间[a,b]连续在开区间(a,b)可微,如果f(a)=f(b),那么至少存在一点c使函数导数f'(c)=0 注意需要再(a,b)可微,如果函数有角点,断点 ...

  4. Win7 64位命令行编译cuda及设置Windows显卡响应时间

    在开始菜单中找到Visual Studio 2013 >> Visual Studio Tools 选择86或64版本的VC命令提示符环境,我用的 VS2013 x86 Native To ...

  5. WINCE 获取智能设备唯一编号

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. 在64位windows下使用instsrv.exe和srvany.exe创建windows服务[转]

    本文转自:https://www.iflym.com/index.php/computer-use/201205020001.html 在32位的windows下,包括windows7,windows ...

  7. House Robber III leetcode 动态规划

    https://leetcode.com/submissions/detail/56095603/ 这是一道不错的DP题!自己想了好久没有清晰的思路,参看大神博客!http://siukwan.sin ...

  8. Android应用:横竖屏切换总结

    眨眼间,已经到了2016你年春节前,离上一篇博客的时间已经有6个月多,回想起这半年的种种,不得不说,学习和工作实在是太忙了,或许这就是程序员的真实写照吧. 写博客之初,主要的目的还是为了把自己的学习痕 ...

  9. disconf安装部署

    1.client pom文件引入 <dependency> <groupId>com.baidu.disconf</groupId> <artifactId& ...

  10. 客户端JS性能的一些优化的小技巧

    下面是一些关于客户端JS性能的一些优化的小技巧:1.[顶]关于JS的循环,循环是一种常用的流程控制.JS提供了三种循环:for(;;). while().for(in).在这三种循环中 for(in) ...