关于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呢,我想事物的存在一定有它自己的道理 ...
随机推荐
- z-index优先级总结
因为显示器显示的图案是一个二维平面,拥有x轴和y轴来表示位置属性.为了表示三维立体的概念如显示元素的上下层的叠加顺序引入了z-index属性来表示z轴的区别,表示一个元素在叠加顺序上的上下立体关系. ...
- canvas在手机qq浏览器显示错乱
做大转盘的时候,使用html5 canvas 生成转盘,但在手机qq浏览器中显示错乱. 原本想在后台生成大转盘图片,后来想一想既然用图片来实现, 还不如直接由canvas 导出 toDataURL 在 ...
- sunny day
初始学习记录 基于http://www.htmleaf.com/html5/html5muban/20141121552.html模板 <!DOCTYPE html> <html l ...
- Android学习手记(3) Activity间传递数据
1. 简单数据传递 建立两个Activity,名称分别为MainActivity和TheAty,在MainActivity中新建一个Button,id为btnStartAty.在TheAty中新建一个 ...
- VC Windows系统服务创建代码
Windows系统服务创建步骤,常用类封装,废话不多说,直接上代码 // ServceDemo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" ...
- PHP Sessions
PHP Sessions PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置.Session 变量存储单一用户的信息,并且对于应用程序中 ...
- 配置CAS错误No Certificate file specified or invalid file format
配置tomcat证书 keystore文件后启动一直报错:(tomcat版本:apache-tomcat-6.0.43) tomcat配置: <Connector port="8443 ...
- android JNI (二) 第一个 android工程
下载NDK 后 它自带有 sample,初学者 可以导入Eclipse 运行 这里 我是自己创建的一个新工程 第一步: 新建一个Android工程 jni_test(名字自取) 第二步:为工程添加 本 ...
- apache2.2 虚拟主机配置详解
一.修改httpd.conf 打开appserv的安装目录,找到httpd.conf文件,分别去掉下面两行文字前面的#号. #LoadModule vhost_alias_module modules ...
- pip安装第三方库以及版本
这篇blog只是写给自己看看的. 今天突然遇到sqlalchemy映射到数据库时,一个字段类型是datetime(6),我这边死活访问不上,之前一直没有问题,最后查明原因,原来是第三方库的版本问题,真 ...