JavaScript中的this的指向

this是JS的关键字,随着函数使用场合的不同,this值会发生变化。但总的原则是,this总是指向调用this所在函数的那个对象。

1、纯函数调用

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

在JavaScript的变量作用域中规定,“全局变量都是window对象的属性。”因此执行test()时相当于window.test(),此时test函数体内的this关键字的指向变成了window对象。即将window对象的x变为0。

var x=1;
var b={
   x:2,
   getX:function(){
      return this.x;
   }
 };
alert(this.x);     //1
alert(b.getX()); //2

在上面的代码中,alert(this.x)中this指向window,所以在全局中搜寻x的值,为1;

alert(b.getX())中由于x所在函数作为对象b的方法被调用,this指向了b,因此在b中搜寻x的值,为2。

2、作为方法调用,那么this指调用方法的这个对象。

function test(){
alert(this.x);
}
var o={};
o.x=1;
o.m=test;
o.m();  //1

3、作为构造函数调用。此时this指向新生成的对象。

function Test(){
   this.x=1;
}
var o= new Test();
alert(o.x);  //1

4、apply调用。this指向的是apply中的第一个参数。

var x=0;
function test(){
   alert(this.x);
}
var 0={};
o.x=1;
o.m=test();
o.m.apply();  //0
o.m.apply(o);//1

当apply没有参数时,表示为全局对象。所以值为0。

时间: 2024-10-13 21:47:05

JavaScript中的this的指向的相关文章

关于javascript中this 飘忽不定的指向的问题

this指向问题绝对可以排js 的top 5最难和最重点的问题,初学者常常搞不清楚this指向哪里,特别是学过java和c#的人,想当年俺也迷糊了好久,直到遇到蝴蝶书,主要是因为js和主流的面向对象语言java,c#都不同(相似的问题还有new 操作符的问题, 关于new 构构器函数的原理,参见这篇文章: http://www.cnblogs.com/windyfancy/p/5167266.html ),this并不指向当前对象,这是理解this的关键所在,this的指向取决于你是采用何种方式

javascript中,对于this指向的浅见

# this的指向在函数创建的时候确定不了.只有在执行的时候,才可以确定. ## 1 . 这里的this指向window window.fn(); 所以this.user是undefined function fn (){ var user='追梦人'; console.log(this.user); // undefined console.log(this); // window } fn(); ## 2.谁调用,指向谁 1 var o ={ 2 user:'追梦人', 3 fn:funct

JavaScript中匿名函数this指向问题

this对象是在运行时基于函数执行环境绑定的,在全局函数中,this=window,在函数被作为某个对象的方法调用时,this等于这个对象. 但是匿名函数的执行环境是全局性的,所以匿名函数的this指向是window var name = 'window' var person = { name :'Alan', sayName:function () { return function () { console.log(this.name) } } } person.sayName()() /

JavaScript中改变this的指向方法(call和apple)

1.方法定义 call方法:语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj apply方法: 语法:apply([thisObj[,argArray]]) 定

JavaScript中this关键字的指向问题

1.纯粹的函数调用,this就代表全局对象Global var x = 1; function test(){ var x = '二哈'; console.log(this.x); //1 } test(); 2.作为对象的成员方法时,this代表这个对象 var x = '二哈';function test(){ console.log(this.x); //1 } var obj = { x: 1, fn: test } obj.fn(); 3.作为构造函数调用,this代表new关键字生成

JAVASCRIPT中的THIS指向问题

在深入学习JavaScript之后,我们越来越多的会遇到函数或者在对象内部中,对于this的指向问题的疑惑,其实基本上每一个编程语言中都有一个this,这个this的指向都是大同小异,你也可以汉化它的意思,this的意思是这个,就是本身的意思,那么在JavaScript中,我们的this代替的那个本身到底会随着代码情况的不同而有什么变化呢?今天,我们就来一体探讨一下JavaScript中关于this的指向问题: 首先呢,this可以指向window对象,和其他调用它的对象,当然,在严格模式下,它

Javascript中的this指向。

一.JavaScript中的函数 在了解this指向之前,要先弄明白函数执行时它的执行环境是如何创建的,这样可以更清楚的去理解JavaScript中的this指向. function fn(x,y,name){ var str1=x; var str2=y; this.name=name; function(){ alert(str1,str2); } }fn(1,1,Admin); 当调用fn(1,1,Admin)时,首先函数会创建一个活动对象,也叫做变量对象,接着为函数调用创建一个类似数组的

一篇文章把你带入到JavaScript中的闭包与高级函数

在JavaScript中,函数是一等公民.JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式. function dada() { var a = 1; var b = function() { console.log(a); } return b // b 就是一个闭包函数,因为它能访问dada函数的作用域 } JavaScript的函数也是对象,可以有属性,可以赋值给一个变量,可以放在数组里作为元素

javascript中this的指向

作为一个前端小白在开发中对于this的指向问题有时候总是会模糊,于是花时间研究了一番. 首先this是JS的关键字,this是js函数在运行是生成的一个内部对象,生成的这个this只能在函数内部使用. 但是随着函数使用场合的不同,this的值会发生变化.有一个原则不会变,那就是this指的是,调用函数的那个对象. demo1: 此时函数运行的结果是 1 ,x是全局变量,因为匿名函数demo()是被window调用的,原始写法是window.demo(),因为demo()是被window调用的,所