javascript this对象

函数运行时,自动生成的一个内部对象,只能在函数内部使用

随着函数使用场合的不同,this的值也发生着改变,但是有一个总原则:this指的是调用函数的那个对象(核心)

this对象的指向

一般情况下,我们会从以下四个方面去分析

1、纯粹的函数调用

  例如

1 function test(){
2         this.x = 1;
3         alert(this.x);
4         this.x = 2;
5 }
6 test();     //   1
7 alert(x);    //    2

所以在这边,this指的是全局对象global

这边还有一种情况,很多人会搞错

var x = 2;
    function test(){
        var x = 1;
        function error(){
            alert(this.x);
        }
        return error;
}
test();    //    2

这种情况下this依旧是全局对象global,因为调用它的依旧是全局对象

2、作为对象的方法调用

  例如

1 var demo = {
2         x:1,
3         error : function () {
4             var x = 2;
5             alert(this.x)
6         }
7 };
8 demo.error();    //    1

这边的this指向的是对象demo

还有个迷惑性的例子

 1     var x = 3;
 2     var demo = {
 3         x:1,
 4         error : function () {
 5             var x = 2;
 6             function ss(){
 7                 alert(this.x);
 8             }
 9             return ss;
10         }
11     };
12     demo.error()();    //     3

这边的this又指向全局对象了.....换种方式看也许更清晰

1 (demo.error())();  //把()里的看成一个函数,其实调用这个函数的还是全局对象global

或者再换种写法

 1   var x = 3;
 2     var demo = {
 3         x:1,
 4         error : function () {
 5             var x = 2;
 6             function ss(){
 7                 alert(this.x);
 8             }
 9             ss();        // 3    不管函数在哪边,只要调用它是全局对象,那么this就指向全局对象
10         }
11     };
12     demo.error();    //     3

3、作为构造函数调用

  例如

1     function test(){
2         this.x = 1;
3     }
4     var o = new test();
5     var x = 2;
6     alert(o.x);    //    1     

这边的this就指向新对象o

4、call()和apply()时

  例如

  

 1     var x = 3;
 2     var o = {
 3         x:1
 4     };
 5     var v = {
 6         x:2,
 7         test:function () {
 8             return this.x;
 9         }
10     };
11     alert(v.test());    //  2   this指向v
12     alert(v.test.call());   // 3    this指向全局
13     alert(v.test.call(o));  // 1    this指向o

当使用call和apply时,()中的对象是什么,this就指向什么对象

时间: 2024-11-10 01:19:05

javascript this对象的相关文章

JavaScript - Array对象的使用 及 数组排序 sort

<html> <head> <head> <body> <script language="javascript"> // Array对象 // 第一种构造方法 var arr = new Array(); alert(arr.length); arr[0] = 520 ; arr[1] = "wjp" ; alert(arr.length); // 第二种构造方法 // Array(4) ; // 第三种

JavaScript原生对象属性和方法详解——Array对象 转载

length 设置或返回 数组中元素的数目. 注意:设置 length 属性可改变数组的大小.如果设置的值比其当前值小,数组将被截断,其尾部的元素将丢失.如果设置的值比它的当前值大,数组将增大,新的元素被添加到数组的尾部,它们的值为 undefined.所以length不一定代表数组的元素个数. var arr = new Array(3) arr[0] = "John" arr[1] = "Andy" arr[2] = "Wendy" cons

JavaScript的对象——灵活与危险

没有哪种数据结构比JavaScript的对象更简单灵活了.作为一个弱动态类型语言,JavaScript对对象的属性没有任何约束, 这带来的结果就是,在使用的时候很爽,想加啥属性直接加上去就行了,根本没有类或模板的限制, 想读啥属性直接"点"出来就行了,写出来那是相当简洁:然而这样的代码在运行的时候呢-- JavaScript这种灵活性最大的一个问题也是没有约束.比如一个网店系统有两个部分,一部分产生订单对象, 另一部分拿到订单对象来展示.咱们前端程序员自然是干后面展示那部分事儿的,比如

奔跑吧,我的JavaScript(3)---JavaScript浏览器对象

Window对象 1.是BOM的核心,window对象指向当前的浏览器窗口,最高层对象之一. 2.所有JavaScript全局对象,函数以及变量均自动成为window对象成员 3.全局变量是window对象的属性 4.全局函数是window对象的方法 5.window尺寸 window.innerHright/window.innerWidth,浏览器窗口的内部高度/宽度 6.window方法 window.open()       打开新窗口 window.close()      关闭窗口

JQuery $.each遍历JavaScript数组对象实例

查看一个简单的jQuery的例子来遍历一个JavaScript数组对象. var json = [ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":"3","tagName":"banana&q

【温故而知新-Javascript】对象

1 创建对象 Javascript 支持对象的概率.有多种方法可以用来创建对象. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Javascript Object </title> </head> <body> <script> var myData = new Ob

JavaScript实现对象的深度克隆【简洁】【分享】

JavaScript实现对象的深度克隆 代码实现如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>clone</title> 6 7 <script type="text/javascript"> 8 //对象深度克隆方法 9 10 11 ////

javascript获取对象直接量中的属性和属性值

javascript获取对象直接量中的属性和属性值:所谓的对象直接量简单来说就是,由大括号包裹的键值对列表,例如: var antzone={ webName:"蚂蚁部落", address:"青岛市南区", age:2 } 下面介绍一下如何获取对象直接量中的属性和属性值,代码如下: var antzone={ webName:"蚂蚁部落", address:"青岛市南区", age:2 } for(var prop in a

JavaScript Number 对象

JavaScript Number 对象 JavaScript 只有一种数字类型. 可以使用也可以不使用小数点来书写数字. JavaScript 数字 JavaScript 数字可以使用也可以不使用小数点来书写: 实例 var pi=3.14;    // 使用小数点var x=34;       // 不使用小数点 极大或极小的数字可通过科学(指数)计数法来写: 实例 var y=123e5;    // 12300000var z=123e-5;   // 0.00123 所有 JavaSc

javascript声明对象

javascript的对象声明有三种方法; 1,使用new关键字直接创建对象 1, var p1 = new Person() 2,使用Object直接创建对象 var myOb = new Object(); myOb.name = 'ttf'; myOb.age = '21'; 3,使用json语法创建对象. var p = {     name: 'ttf',     age:21 };