javascript里面的this值会随着使用场景的不同二发生变化,但是总有一个原则,那就是this总指向当前调用函数的那个对象。以下我会举几个例子来说明这个问题。
1.this本身总是指向当前的类的实例
function showMsg(){
var msg=1;
alert(this.msg);
}
showMsg();
这样调用的时候显示undefined,因为showMsg没有实例,所以不能用this
2.下面来看一个点击事件
<div id="nav" onclick="getId();">ddd</div>
function getId() {
alert(this.id)
}

在段代码运行结果显示this.id是未定义的,判断this指向谁,看执行时而不是定义时。只要函数没有绑定在对象上使用,那么它的this就是window。 里面这个this是getId函数内部的,但不是div这个dom内部的。
这段代码相当于div.onclick = function() { getId(); }
有几种解决方法
a.
<div id="nav">ddd</div>
window.onload=initForm;
function initForm()
{
document.getElementById("nav").onclick=getId;
}
function getId() {
console.log(this)
alert(this.id)
}

在这段代码中,函数被绑定在了对象上。所以结果是可行的。
b.
<div id="nav" onclick="getId(this);">ddd</div>
function getId(elem)
{
alert(elem.id);
}

这段代码是相当于把this传给了elem ,elem.id是可以得到的。
3.针对第二个例子的c方法,还想再这多说点其它东西
<div id="nav" onclick="getId(this);" xid="weixin">ddd</div>
function getId(elem)
{
console.log(elem)
alert(elem.id ); //这个是可以的 id是html里面有的属性
alert(elem.xid ); //但是这个不可以,因为xid不是固有属性$(item).attr("xid")
alert(this.id) //这个也是不行的
}

4.可以再看一下这个例子,跟前面是一样的

<form action="#">
<select id="nav">
<option value="">Month</option>
<option value="0">January</option>
<option value="1">February</option>
<option value="2">March</option>
</select>
</form>

window.onload=initForm;
function initForm(){
document.getElementById("nav").onchange = getId;
}
function getId() {
console.log(this)
var xid= this.options[this.selectedIndex].value;
alert(xid);
} //这个可以得到id值

这种也是可以得到结果的。

javascript里面this机制的几个例子的更多相关文章

  1. javascript的垃圾收集机制

    × 目录 [1]原理 [2]标记清除 [3]引用计数[4]性能问题[5]内存管理 前面的话 javascript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存.在编写javascri ...

  2. 简述JavaScript的运行机制

    想要理解JavaScript的运行机制,需要分别深刻理解以下几个点: · JavaScript的单线程机制 · 任务队列(同步任务和异步任务) · 事件和回调函数 · 定时器 · Event Loop ...

  3. JavaScript 垃圾回收机制分析

    同C# .Java一样可以手工调用垃圾回收程序,但是由于其消耗大量资源,而且手工调用的不会比浏览器判断的准确,所以不推荐手工调用垃圾回收.   最近精力主要用在了Web 开发上,读了一下<Jav ...

  4. Javascript:再论Javascript的单线程机制 之 DOM渲染时机

    Javascript:再论Javascript的单线程机制 之 DOM渲染时机 背景 Javascript是单线程事件驱动的,所有能看到的Javascript代码都是在一个线程执行,定时器回调和AJA ...

  5. 我想这次我真的理解了 JavaScript 的单线程机制

    今天面试的时候被问到一个问题,是关于 JS 异步的.当时我脑海中闪过了一个单线程的概念,但却没有把真正的原理阐述清楚.所以回来特意重新回顾了前面单线程和异步相关的一些知识点. 虽然之前学习的时候也接触 ...

  6. 浅谈javascript的运行机制

    积累一下这几天学的,记录一下: 一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程 ...

  7. JavaScript 预解析机制

    首先我们来看一段代码: <script> console.log(a); var a = 10; </script> 此时运行结果为   为什么会显示undefined呢?这就 ...

  8. javaScript的执行机制-同步任务-异步任务-微任务-宏任务

    一.概念理解 1.关于javascript javascript是一门单线程语言,在最新的HTML5中提出了Web-Worker,但javascript是单线程这一核心仍未改变.所以一切javascr ...

  9. 一篇文章图文并茂地带你轻松学完 JavaScript 事件循环机制(event loop)

    JavaScript 事件循环机制 (event loop) 本篇文章已经默认你有了基础的 ES6 和 javascript语法 知识. 本篇文章比较细致,如果已经对同步异步,单线程等概念比较熟悉的读 ...

随机推荐

  1. gridView获得每行的值

    前台代码: <asp:GridView ID="GridView1" runat="server" DataKeyNames="ID" ...

  2. iOS6、7、8、9新特性汇总和适配说明

    iOS6新特性 一.关于内存警告 ios6中废除了viewDidUnload,viewWillUnload这两个系统回调,收到内存警告时在didReceiveMemoryWarning中进行相关的处理 ...

  3. 【代码笔记】iOS-点评内容

    一,效果图. 二,工程图. 三,代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIVie ...

  4. thinkphp 创建子应用

    1 根目录建立 文件名 a 2 a 下建立index.php define('APP_NAME', 'a');define('APP_PATH', './a');define('RUNTIME_PAT ...

  5. safari浏览器添加书签的方法

    说起来自己也是够笨的,竟然找了半天没发现safari的添加书签按钮.为了减少别的朋友遇到这个问题的解决时间. 我做下截图说明,其实就是safari的分享按钮. 希望对你能有所帮助

  6. win10_x64更新错误解决: 安装一些更新时出现问题,但我们稍后会重试。如果持续出现这些问题,并且你想要搜索Web或联系支持人员以获取相关信息,以下信息可能会对你有帮助:

    可能的原因: 1.windows 服务没打开 win+r,打开[运行]对话框 输入 [service.msc] 找到 [Windows Firewall]和[Internet connection s ...

  7. 【转发】网易邮箱前端技术分享之javascript编码规范

    网易邮箱前端技术分享之javascript编码规范 发布日期:2013-11-26 10:06 来源:网易邮箱前端技术中心 作者:网易邮箱 点击:533 网易邮箱是国内最早使用ajax技术的邮箱.早在 ...

  8. Sql Server之旅——第一站 那些给我们带来福利的系统视图

    本来想这个系列写点什么好呢,后来想想大家作为程序员,用的最多的莫过于数据库了,但是事实上很多像我这样工作在一线的码农,对sql 都一知半解,别谈优化和对数据库底层的认识了,我也是这样... 一:那些系 ...

  9. 从键盘上输入一个正整数n,请按照以下五行杨辉三角形的显示方式, 输出杨辉三角形的前n行。请采用循环控制语句来实现。

    Scanner sc=new Scanner(System.in); System.out.println("请输入一个正整数:"); int ss=sc.nextInt(); i ...

  10. ReactNative之坑爹的在线安装

    编译一个github上ReactNative应用,根据说明只有3步: npm installreact-native run-androidenjoy 但几个步骤实在是一波三折充满着坎坷,一点都不en ...