js中this的使用案例整理
来源:互联网 发布:阿里云后端框架 编辑:程序博客网 时间:2024/06/15 09:55
在前台js的使用过程中,除了常用的标签或者选择器外,this的作用也是不容忽视的。this可以实现在方法内或者在函数内取值或指向,这是一般的标签或选择器不易做到的。下面就是我在工作和学习中,有些是自己整理,有些人转载别人的文章。对js中的this做了一个简单的整理。
this在使用时,要想分清this指代的是什么,首先就是要分析清楚是哪个函数或者方法调用了this。
案例一、
var obj = {}; obj.x = 100; obj.y = function(){ alert( this.x ); }; obj.y(); //弹出 100这段代码非常容易理解,当执行 obj.y() 时,函数是作为对象obj的方法调用的,因此函数体内的this指向的是obj对象,所以会弹出100。
案例二、
var checkThis = function(){ alert( this.x); }; var x = 'this is a property of window'; var obj = {}; obj.x = 100; obj.y = function(){ alert( this.x ); }; obj.y(); //弹出 100 checkThis(); //弹出 'this is a property of window'
这里为什么会弹出 'this is a property of window',可能有些让人迷惑。在JavaScript的变量作用域里有一条规则“全局变量都是window对象的属性”。当执行checkThis() 时相当于window.checkThis(),因此,此时checkThis函数体内的this关键字的指向变成了window对象,而又因为window对象又一个x属性('thisis a property of window'),所以会弹出 'thisis a property of window'。
上面的两个示例都是比较容易理解的,因为只要判断出当前函数是作为哪个对象的方法调用(被哪个对象调用)的,就可以很容易的判断出当前this变量的指向。
this.x 与apply()、call()
通过call和apply可以重新定义函数的执行环境,即this的指向,这对于一些应用当中是十分常用的。
案例三、
function changeStyle( type , value ){ this.style[ type ] = value; } var one = document.getElementByIdx( 'one' ); changeStyle.call( one , 'fontSize' , '100px' ); changeStyle('fontSize' , '300px'); //出现错误,因为此时changeStyle中this引用的是window对象,而window并无style属性。
注意changeStyle.call()中有三个参数,第一个参数用于指定该函数将被哪个对象所调用。这里指定了one,也就意味着,changeStyle函数将被one调用,因此函数体内this指向是one对象。而第二个和第三个参数对应的是changeStyle函数里的type和value两个形参。最总我们看到的效果是Dom元素one的字体变成了20px。
案例四:
var obj = { x : 100, y : function(){ setTimeout( function(){ alert(this.x); } //这里的this指向的是window对象,并不是我们期待的obj,所以会弹出undefined , 2000); } }; obj.y();如何达到预期的效果
var obj = { x : 100, y : function(){ var that = this; setTimeout( function(){ alert(that.x); } , 2000); } }; obj.y(); //弹出100注意:js中的全局变量都会动态添加到Window 的实例 window,作为其属性。
this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。
纯粹的函数调用:
function test() { this.x = 1; alert(x); } test();
其实这里的this就是全局变量。看下面的例子就能很好的理解其实this就是全局对象Global。
var x = 1; function test() { alert(this.x); } test();//1 var x = 1; function test() { this.x = 0; } test(); alert(x);//0作为方法调用,那么this就是指这个上级对象。
function test() { alert(this.x); } var o = {}; o.x = 1; o.m = test; o.m(); //1作为构造函数调用。所谓构造函数,就是生成一个新的对象。这时,这个this就是指这个对象。
function test() { this.x = 1; } var o = new test(); alert(o.x);//1apply调用
this指向的是apply中的第一个参数。
var x = 0; function test() { alert(this.x); } var o = {}; o.x = 1; o.m = test; o.m.apply(); //0 o.m.apply(o);//1
阅读全文
0 0
- js中this的使用案例整理
- js中this的使用
- js中this的使用
- js中this的使用
- js中this关键字的使用
- JS中this关键字的使用
- javascript(js)中使用this
- js中this.index使用
- JS 中 this上下文对象的使用方式
- JS中this的几种使用方式
- js中this的总结
- js 中 this的探讨
- js中this的总结
- js中this的总结
- JS中this的总结
- js中this的总结
- js 中 this 的用法
- js中this的总结
- @JsonIgnore @JsonIdentityInfo 处理Hibernate 循环引用的问题
- CMake + MinGW + OpenCV + CodeBlocks Windows下环境搭建
- 交叉编译出错
- Java基础回顾——重难点易错点【2】
- android shape 使用详解
- js中this的使用案例整理
- MFC学习笔记(一):模态对话框与非模态对话框的区别、创建及显示
- idea 从远程仓库导入git项目
- git学习实践
- KSVD
- 特殊进程之僵尸进程
- linux 命令行重启机器
- 《数据结构学习与实验指导》3-1:一元多项式求导
- 使用Eclipse的windowbuilder插件进行Windows平台下的可视化编程