关于Javascript语言中this关键字(变量)的用法
最近很多 Javascript初学者朋友总在问: Javascript 的this 关键字的用法。我在这里索性总结一下 this关键字的用法。
this 关键字是面向对象编程语言中的一个重要概念!在JAVA,C,C#,C++等语言中,this 总是指向当前的运行对象。但是在 Javascript ,由于javascript的动态性以及词法作用域特性,this的指向在运行时才确定。
this 关键字的用法其实比较复杂,不过你只要牢记一句话就可以:
“this 变量:永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。
如果处在匿名函数中、或者不处于任何对象中,this 都指向宿主的根对象(在浏览器里面就是 window)”
另外,javascript中还用 call() 和 apply() 来调用函数,再记住下面这两句话:
如果是call()、apply()、with(),指定的this是谁,就是谁 !
普通的函数调用,函数被谁调用,this就是谁。
(忽然想起:ECMAScript 5 的严格模式中,严禁使用 with() 函数,并且ECMAScript 3 中并不推荐使用 with())
上面的举例还是太过复杂,不太科学。我举一个更加直白的说明:Javascript 的 this 很花心,在哪个对象的家里,就是那个对象的。
而 C,C++,C# 的 this 很专一,无论在哪,都属于原配!
并且 Javascript 的函数作用域 则像出生地,出生在哪里,出生地就是哪里!和运行环境无关!(此处可参照《Javascript权威指南第六版》第8章!不过貌似只有淘宝前端翻译的纸质版本,人民币139大洋!这里有一个《Javascript权威指南第四版》,凑和着看吧。)
大致就这样吧,有问题,请留言。
此条目由 王子墨 发表在 前端随笔 分类目录,并贴了 javascript 标签。将固定链接加入收藏夹。
关于Javascript语言中this关键字(变量)的用法的更多相关文章
- 转:C语言中的static变量和C++静态数据成员(static member)
转自:C语言中的static变量和C++静态数据成员(static member) C语言中static的变量:1).static局部变量 a.静态局部变量在函数内定义,生存期为整个程序 ...
- C语言中extern关键字的使用
C语言中extern关键字的使用,直接上代码. file1.c文件 #include<stdio.h> extern long power(int); int A = 2; int mai ...
- C++语言中std::array的神奇用法总结,你需要知道!
摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此, ...
- C语言中static关键字的用法
C记得还是大一时学的,现在觉得好久没用了,又捧起来看看.今天刚看到有关static关键字,仔细地看了一遍<C和指针>这本书中的解释,现在觉得清楚多了. 首先,我们将static关键字,修饰 ...
- C语言中static关键字的作用
static的作用(精辟分析) 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加sta ...
- C语言中volatile关键字的作用
http://blog.csdn.net/tigerjibo/article/details/7427366#comments 一.前言 1.编译器优化介绍: 由 于内存访问速度远不及CPU处理速度, ...
- C语言中 struct成员变量顺序对内存的占用
在C语言的结构体中,是会按照其变量类型来进行分配内存大小的.但是对于不同的编译器,结果是不同的,在VC++6.0中是怎么个分配情况呢?用一下C中的关键字sizeof()来测试下,注意sizeof()不 ...
- 转载 C语言中volatile关键字的作用
一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问.另外在现代CPU中指令的执行并不一定严格按照顺序执行,没 ...
- C语言中const关键字的用法
关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const呢,我想事物的存在一定有它自己的道理 ...
随机推荐
- Lesson 3: The Amazing New Mobile Web
Lesson 3: The Amazing New Mobile Web Article 1: This is Responsive by Brad Frost 各种响应式网站设计的资源. Artic ...
- 如何给report自定义page number
问题描述: report在设置分页后会自动分页,但是有默认的page number,现在的问题是有时default page number不能满足我们的需求,此时就需要自定义page number. ...
- ssh key报but this does not map back to the address – POSSIBLE BREAK-IN ATTEMPT!错误
在/etc/hosts 文件加上对方的主机名 ip地址,可以ping通主机名即可.
- ubuntu 安装 maven3
sudo add-apt-repository ppa:natecarlson/maven3 sudo apt-get update && sudo apt-get install m ...
- java事件处理3
鼠标拖动事件 接口MouseMotionListener 两个方法 mouseDragged(MouseEvent)//拖动鼠标 mouseMoved(MouseEvent)//移动鼠标 一个拖动按钮 ...
- 转:测试计划(出处:: 51Testing软件测试网--zfx081)
测试计划阶段主要处于测试的先期准备阶段,在该阶段中主要是对将要进行的测试工作做一个整体的规划.包括一下内容: 1.测试目的和测试项目简介. 1.1测试目的:××××系统的测试计划有助于实现一下目标 ...
- smarty 变量调节器
变量调节器:<{$a|变量调节器}> 了解更多可以查询smarty手册 主要修改此页面的信息来了解变量调节器:main.php/main.html(0603) 1.利用给定的变量调节器 c ...
- phpcms v9二次开发之模型类的应用(2)
二.模型操作方法select()--查询语句 //查询级别管理列表信息 public function levellists() { $lelists = $this->l ...
- JS之对象数组遍历?
一.js实现遍历对象 <script> ","destroy":"97%"}; var props = ""; for ...
- php计算剩余时间的自定义函数
把两个日期格式的字符串转化成unix时间戳,然后相减获得时间戳差,最后判断剩余时间,生成类似(2小时30分钟20秒前发布)这样的时间格式,代码如下: function gettime($time_s, ...