this关键字的指向

javascript 的this关键字总是指向一个对象,具体指向哪个对象是在运行基于函数的执行环境动态绑定的,而非函数被声明时的环境。this的指向除去with和eval的情况,具体的指向大致分为四种

1.作为对象的方法调用。

2.作为普通函数调用

3.构造器的调用

4.Fun.prototype.call 或 Fun.prototype.apply

//  1.在javascript中作为对象的方法被调用,this指向该对象
       	var obj = {
       		a:1,
       		getA : function(){
       			console.log(this === obj);
       			console.log(this.a);
       		}
       	};
       	obj.getA();  //对象调用方法 this指向对象  输出1

  

// 2.在javascript中作为普通函数被调用,this指向全局对象
       	   window.name = "wu";
       	   var myObject = {
       	   	  name:"seen",
       	   	  getName : function(){
       	   	  	return this.name;
       	   	  }
       	   };

       	    console.log(myObject.getName());   //输出  seen

       	    var getName1 = myObject.getName;
       	    console.log(getName1());          //this指向全局   输出 wu 

  

  

//3构造器调用  构造器中的this指向返回的这个对象
            var MyClass =function() {
            	this.name = "seen";
            };

            var obj = new MyClass();  //this指向本身
            console.log(obj.name);    //输出seen

 //4 apply call可以动态改变函数传入的th           var obj1 = {

           	  name:"sevn",
           	  getName: function(){
           	  	return this.name;
           	  }
           }; 

           var obj2 ={
           	  name:"anne"
           };
           console.log(obj1.getName());           //输出sevn
           console.log(obj1.getName.call(obj2));  //输出anne
           console.log(obj1.getName.apply(obj2)); //输出sanne

call(a,b) apply(a,b) 均接受两个参数 ,a是this对象的指向 ,b是带下标的集合,可以是数组
                    call中的b参数要一个个全部列出,例如 call(a,1,2,3)
                    apply中的b参数传入数组 例如 apply(a,[1,2,3])
                  可以用arguments代替apply(a,arguments)      apply的使用比call要多

  

时间: 2024-08-08 09:35:32

this关键字的指向的相关文章

JS中精选this关键字的指向规律你记住了吗

1.首先要明确: 谁最终调用函数,this指向谁 this指向的永远只可能是对象!!!!! this指向谁永远不取决于this写在哪,而取决于函数在哪里调用! this指向的对象,我们称之为函数的上下文context,也叫做函数的调用者是谁! 2.this指向的规律(与函数调用的方式息息相关) this指向的情况取决于函数调用的方式有哪些(总结如下): 2.1.通过函数名()直接调用--this 指向window: function func(){ console.log(this); }  f

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指向

在js中this始终指向一个调用函数的那个对象 var a='有种你干掉我啊'; //纯粹调用函数 function test(){ console.log(this.a);//默认指向全局对象 } //test();//=>windows.test() //作为对象的方法被调用 Function.prototype.log=function(){ console.log(this.a); } //此时t为一个函数对象,注意js中一切皆为对象,函数是特殊的对象,具有prototype而已 //t

javascript之 this 关键字详解

不管学习什么知识,习惯于把自己所学习的知识列成一个list,会有助于我们理清思路,是一个很好的学习方法.强烈推荐. 以下篇幅有点长,希望读者耐心阅读. 以下内容会分为如下部分: 1.涵义 1.1:this涵义 1.2:this指向的可变性 2.使用场合 2.1:全局环境 2.2:构造函数 2.3:对象的方法 3.使用注意点 3.1:避免多层嵌套this 3.2:避免数组处理方法中的this 3.3:避免回调函数中的this 1.涵义 1.1:this涵义 在我写的一篇关于 构造函数与new关键字

Java中静态关键字的使用方法介绍二

1         静态方法 前面我们了解了静态成员变量的一些使用的方式,现在我们接着探讨一下静态方法的相关内容,并了解一下静态方法的使用情况. 1.1      静态方法和一般方法的定义方法 在类中我们可以定义类的方法,如果当一个方法的前面加了关键字Static,也当方法使用静态修饰符时,我们则称这个方法为静态方法,没有这个关键字,则不是静态方法.还是以Car类为例,定义一个静态方法stop(),和一个非静态方法show(),具体看下面代码所示. public class Car { publ

深入理解Javascript之this关键字

深入理解Javascript之this关键字 作者: Laruence(   ) 本文地址: http://www.laruence.com/2009/09/08/1076.html 转载请注明出处 Javascript是一种很灵活的语言, 而This关键字又是灵活中的灵活, 但是因为它的灵活, 也注定了它的难用. 以前我用this的时候, 都会觉得不踏实, 老是担心它不知道怎么地就会指到另外的什么地方. 其实, 这都是因为, 我们对它的不了解. 刚好最近再给百度学院做<Javascript高级

关于setInterval和setTImeout中的this指向问题

前些天在练习写一个小例子的时候用到了定时器,发现在setInterval和setTimeout中传入函数时,函数中的this会指向window对象,如下例: var num = 0; function Obj (){ this.num = 1, this.getNum = function(){ console.log(this.num); }, this.getNumLater = function(){ setTimeout(function(){ console.log(this.num)

objective-c 关键字和概念

@ 看到这个关键字,我们就应该想到,这是Object-C对C语言的扩展,例如@interface XXX. @interface 声明类 @implementation 实现类 @protocol 声明协议 @optional 与@protocol配合使用,说明协议中的某个或者某几个方法可以不实现 @required 与@protocol配合使用,说明协议中的某个方法或者某几个方法必须实现 @end 与@interface ,@implementation,@protocol配合使用,代表声明或

JavaScript的this关键字

JS中的this关键字让很多新老JS开发人员都感到困惑.这篇文章将对this关键字进行完整地阐述.读完本文以后,您的困惑将全部消除.您将学会如何在各种不同的情形正确运用this. 我们和在英语.法语这样的自然语言中使用名词一样地使用this.比如,“John飞快地跑着,因为他想追上火车”.请注意这句话中的代指John的代名词“他”.我们原本也可以这样表达,“John飞快地跑着,因为John想追上火车”.按照正常的语言习惯,我们并不按第二种方式表达.如果我们真按第二种方式说话,我们的家人和基友一定