深入解析Javascript中this关键字的使用
深入解析Javascript中面向对象编程中的this关键字
在Javascript中this关键字代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如:
function TestFunction(){
this.demoVal='This is a demo variable';
};
随着函数使用的场合不同,this的值会发生改变。但是有一个总的原则:this指的是调用函数的那个对象。
接下来分情况讨论this关键字的使用:
1. 纯粹的函数调用(这是函数的通常用法,属于全局性调用),this代表全局性对象Global.Demo程序如下:
function TestFunction(){
this.demoVal='This is a demo variable';
alert(this.demoVal);
};
TestFunction(); //This is a demo variable
接下来证明此时的this代表全局对象,Demo程序如下:
var globalVal='This is a demo global variable';
function TestFunction(){
alert(this.globalVal);
};
TestFunction(); //This is a demo global variable
2. 作为对象的方法调用(这时this指向上一级对象),Demo程序如下:
function TestFunction(){
alert(this.demoVal);
};
var obj={};
obj.CallFunction=TestFunction;
obj.demoVal='This is a object variable';
obj.CallFunction(); //This is a object variable
3. 作为构造函数调用,所谓的构造函数就是通过这个函数生成一个新的Object对象。此时,this就是指向这个新对象。Demo程序如下:
function TestFunction(){
this.deomVal='This is a demo variable';
};
var obj=new TestFunction();
alert(obj.deomVal); //This is a demo variable
接下来的代码证明this不是指向全局对象:
var demoVal='This is a global variable';
function TestFunction(){
this.demoVal='This is a local variable';
};
var obj=new TestFunction();
alert(demoVal); //This is a global variable
以上代码显示demoVal值根本没有改变,因此证明this不是指向全局的对象。
4. 使用apply调用,apply函数可以改变函数的执行上下文,apply是函数对象的一个方法,它的作用是改变函数的调用对象,即函数的执行上下文。它的第一个参数表示改变后调用这个函数的对象, 因此,this指向的是第一个参数,Demo实例如下:
var demoVal='This is a demo variable';
function TestFunction(){
alert(this.demoVal);
};
var obj={};
obj.demoVal='This is an object demo variable';
obj.TestFunction=TestFunction;
obj.TestFunction.apply(); //This is a demo variable
apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为:'This is a demo variable',证明this指的是全局对象。
如果将以上代码的最后一行改为:obj.TestFunction.apply(obj),则输出的结果为:'This is an object demo variable'。证明此时的this指向obj。
深入解析Javascript中this关键字的使用的更多相关文章
- 深度解析javascript中的浅复制和深复制
原文:深度解析javascript中的浅复制和深复制 在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有Number,Boolean,String,Null ...
- 全面解析JavaScript中“&&”和“||”操作符(总结篇)
1.||(逻辑或), 从字面上来说,只有前后都是false的时候才返回false,否则返回true. ? 1 2 3 4 alert(true||false); // true alert(false ...
- JavaScript中this关键字的使用比较
JavaScript中this关键字的使用比较 this关键字在JavaScript中,用的不能说比较多,而是非常多.那么熟悉this关键字的各种用法则显得非常关键. this有时候就是我们经常说的上 ...
- javascript中new关键字详解
和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象. 但在 javascript 中,万物皆对象,为什么还要通过 ...
- [No000069]Javascript中this关键字详解
Quiz 请看下面的代码,最后alert出来的是什么呢?(chrome下按F12,选择Console直接复制粘贴运行) var name = "Bob"; var nameObj ...
- 大前端学习笔记整理【五】关于JavaScript中的关键字——this
写在前面 工作有那么一段时间了,但是在工作中,发现自己的理论知识还是有所欠缺.特别是在javascript上,很多东西其实自己属于知道要用这个,但是不知道为什么要这么用...这种情况很是尴尬了,所以写 ...
- javascript中this关键字详解
不管学习什么知识,习惯于把自己所学习的知识列成一个list,会有助于我们理清思路,是一个很好的学习方法.强烈推荐. 以下篇幅有点长,希望读者耐心阅读. 以下内容会分为如下部分: 1.涵义 1.1:th ...
- JavaScript中var关键字的使用详解
作用 声明作用:如声明个变量. 语法 ? 1 var c = 1; 省略var 在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. ? ...
- javascript中的关键字和保留字
javascript中关键字的问题,将名称替换了下,确实就没有问题了.现在将它的关键字和保留字贴出来,便于日后查看和避免在次出现类似的问题. 1 关键字breakcasecatchcontinuede ...
随机推荐
- 4412开发板升级4.2之后改了logo开机后屏幕闪解决办法
荣品4412开发板升级到4.2请注意增加虚拟机内存. 问:荣品4412开发板升级到Android4.2之后,改了logo.4412板子开机后,过一会屏幕就一闪一闪,是什么原因? Android4.2编 ...
- php翻页
<?php$conn = mysql_connect("localhost","root","") or die("连接数据 ...
- centos下在线安装mysql
1 首先查看是否有安装过,如果已经安装过,就不必再安装了 yum list installed mysql* rpm -qa | grep mysql* 2 查看有没有安装包: yum list my ...
- win7下Outlook2010禁止访问具有潜在不安全因素的附件的解决办法
发生情景: 收到.bat .exe等敏感类型附件时,会碰到此问题. 解决方法: 1.打开regedit.exe 2.依次展开HKEY_CURRENT_USER\Software\Microsoft\O ...
- VS2012+EF6+MYSQL配置
安装以下三个插件: 1. EFTools6.1.0ForVS2012.msi 2. mysql-connector-net-6.8.3.msi 3. Mysql for Visual Studio 1 ...
- python获取指定时间段内的随机不重复的时间点
上篇 <python时间时分秒与秒数的互相转换>http://www.cnblogs.com/gayhub/p/6154707.html 提到了把时间转成秒数的方法, 这篇写写转换成秒数后 ...
- jQuery实用工具函数
1. 什么是工具函数 在jQuery中,工具函数是指直接依附于jQuery对象.针对jquery对象本身定义的说法,即全局性的函数,我们统称为工具函数,或Utilities函数.它们有一个明显的特征, ...
- MySQL数据库3 - MySQL常用数据类型
一. MySql常用数据类型 数据类型:整数(tinyint smailint int bigint) 定点数 decimal(p,s) ------ 小数点位置固定的 ---> 数 ...
- final修饰的变量是引用不能改变,还是引用的对象不能改变???
对于这个问题,我们不能只记结论,要拿实例说话,参看以下代码: public class Demo { public static void main(String[] args) { final St ...
- C# 3D效果饼状图的绘制
第一步:放置图表控件 拖动工具栏的Chart控件到界面上 然后选中控件,设置Series属性,将ChartType属性改为pie 第三步:设置3D效果 选择控件,设置ChartArea属性,如下 设置 ...