JS中this关键字的解释
发布网友
发布时间:2022-04-21 01:07
我来回答
共1个回答
热心网友
时间:2023-10-30 09:25
this关键字
每一个行为发生的时候,肯定会有一个发生这个行为的主体。比如说吃饭这个方法,它是由上帝来定义的,世界上所有的人来执行。吃饭这个行为发生的时候,主体就是在吃饭的这个人,也就是要有人执行吃饭这个行为。用中文来表达就是张三吃饭或、李四吃饭,用编程语言来表达则是张三.吃饭()、李四.吃饭()。有时候我们需要在一个行为(方法)里,能确定执行这个行为的人是谁,或者说我们需要知道是那个对象执行了这个方法,更具体的说我要能知道是谁在吃饭。
在中文里有第一人称“我”,这个我放在吃饭这个行为了,就表示吃饭的那个人。张三吃饭,则张三吃饭行为中的那个我,就是张三,李四吃饭,则这个吃饭行为里的我就是李四。
在编程语言里,同样也有“我”的概念,那就是this关键字。每一个定义的方法里,都会有一个this关键字,这个this关键不是由在那儿定义的来决定的,而是由谁来执行的决定的。这是判断this关键表示什么的重要原则。比如: 张三.吃饭();//这个吃饭里的this就是张三这个对象 也就是判断点(.)前面的对象是谁,那这个this就是谁。 但有的方法是直接执行的,前面没有点,就更没有执行的对象了,那this关键是谁呢?像alert方法,直接执行的,那alert方法里的this是谁呢?凡是可以象alert这样直接运行的方法,都是全局方法(全局方法叫函数),全局方法的执行,都相当于前面省略掉了window.,也就是说alert()相当于window.alert(),那这样直接运行的方法里的this关键字,肯定就是window了。
² 再强调一次:方法里的this表示的是那个对象,是由谁来执行决定的。和在那儿定义的没有关系。 补充:this表示的对象,是这个方法活动的“上下文”。“上下文”是那些计算机前辈在翻译这个词的时候,脑子抽了一下,就把context翻译成这么一个中国人看不懂的新词汇了。所谓的“上下文”, 也就是表示当前的这些代码的活动范围,当前的活动(代码的执行)在那个对象上发生的意思。吃饭这个活动,是在张三这个对象上发生的,则张三是吃饭的上下文。在body里去查找所有的div元素,则body是这个查找活动的上下文。那这个this,就是这个方法运行的活动范围了。 方法里this当前这个方法运行的上下文,但上下文不仅限于this(就是个体与整体的区别)。 第二种风格的this关键字解释 this关键字 每一个方法或函数都会有一个this对象,this对象是方法(或函数)在执行时的那个环境,也可以说是这个函数在那个作用域下运行的。 说的更通俗一点:this就相当于咱们平时说话时候说的“我”,“我家”的概念。就是说当一个方法在运行的时候,它是属于谁的。它在运行的时候它的家是谁家。 this的概念比较抽象,是讲课的时候的难点也是重点。 关于this的具体表示那个对象,和函数的运行方式(或调用方式)有关。在JavaScript中一共有四种调用模式:方法调用模式(对象属性模式)、函数调用模式(就是普通的函数执行)、构造调用模式(应该叫实例上的方法模式更好)和apply调用模式。
一、当它为一个对象上的方法的时候,this是当前这个对象。 方法调用模式(或称:对象属性模式) 先了解一个概念:方法和函数的区别。方法和函数本质一样,形式不同而已。看下例: function fn(){alert(this)}这样就是定义了一个函数,当:fn()的时候,叫这个函数运行。同样是上面这个fn函数,如果把它赋值给一个对象的属性,就成了方法了,看下面的例子。 var obj=new Object();//先定义一个对象obj obj.objFn=fn;那现在的obj.objFn就是方法了,但其实objFn和fn指向的是同一个内存地址。但fn是直接定义的,就是函数,而objFn是obj这个对象上的一个属性,则objFn就是方法了。方法和函数本质上是一样的,只是在不同的情况下的叫法不同。 但当fn运行的时候,弹出的是window(任何函数被调用,this都表示window);而objFn运行的时候,弹出的是object,因为当它做为一个方法运行的时候,this关键字表示的是objFn这个属性所属的这个对象obj。也就是说,在这种情况下,this表示obj。 再啰嗦一遍:当函数成为一个对象的属性的值的时候,这个函数里的this指向当前这个对象(这时候函数就变成了方法) 再啰嗦第三遍:当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。方法可以使用this去访问对象,所以它能从对象中取值或修改对象。this到对象的绑定发生在调用的时候。这个“超级”迟绑定使得函数可以对this高度复用。通过this可取得它们所属对象的上下文的方法称为公共方法。
二、函数调用模式当函数并非一个对象的属性时,那么它被当做一个函数来调用。此模式下this绑定到全局对象。通过在对象内将this赋值给that,可以使函数模式下调用that来访问指定对象。 (就是上面解释的函数方式)三、类的实例上的方法中的this指向当前的实例例如: function Person(){ } Person.prototype.cry=function (){alert(this)} var rose=new Person(); rose.cry();//现在这个cry就被称做方法,这个方法里的this就表示rose这个实例。 详细的讲解,请见《面向对象和设计模式》的课堂讲解和视频 ④使用call和apply方法强制改变this关键字(附在面向对象一章的讲解里) 测试题: 题目一:var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()()); //The Window 解析:object.getNameFunc后面跟了两对括号。先运行object.getNameFunc(),这个方法运行后返回了一个函数,就是这个方法里面定义的那个匿名函数,然后再让这个匿名函数运行。 可以分解成以下步骤: var fn= object.getNameFunc();//object.getNameFunc这个方法里的this是表示object这个对象,但它返回的是一个函数,返回的这个函数里的这个this则表示window了 fn();//当返回的这个函数运行的时候,this表示是window这个对象 和上一题目类似的题: function a(){ alert(this); } var arr = [1,2,3]; arr.f = a; arr.f();//会输出什么 解析:把a函数赋给arr的属性f,则f就成为arr这个对象上的方法了,它运行的时候就表示arr这个数组对象。 如果直接这样:a(); 则这时候的this表示的是window这个对象
JS中this关键字的解释
第二种风格的this关键字解释 this关键字 每一个方法或函数都会有一个this对象,this对象是方法(或函数)在执行时的那个环境,也可以说是这个函数在那个作用域下运行的。 说的更通俗一点:this就相当于咱们平时说话时候说的“我”,“我家”的概念。就是说当一个方法在运行的时候,它是属于谁的。它...
js中的this是什么意思?
在JavaScript中,this代表着当前正在执行的函数或方法的上下文。它可以是全局对象(在浏览器中为window),也可以是对象或函数本身。当函数被调用时,this指向调用该函数的对象或上下文。在不同情况下,this的指向会发生变化。例如,在对象中调用函数时,this指向该对象,而在全局作用域中调用函数时,this指...
js中this是什么意思?
js中this指的是什么?在JavaScript中,this是一个关键字,可以认为是一个指向当前作用域中对象或函数的指针。在不同的上下文环境中,this指向的对象是不同的,可以是全局对象、函数的局部对象或者是被调用的对象本身。它的值是在函数被调用时确定的,而不是在函数定义时确定的。this的作用在于发挥上下文...
js中this代表什么意思?
this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,下面分四种情况:情况一:纯粹的函数调用 :这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。情况二:作为对象方法的调用 :函数还可以作为某个对象的方法调用,这时this就指这个上级对象...
javascript中的this到底指什么?
JavaScript:this是什么?定义:this是包含它的函数作为方法被调用时所属的对象。说明:这句话有点咬嘴,但一个多余的字也没有,定义非常准确,我们可以分3部分来理解它!1、包含它的函数。2、作为方法被调用时。3、所属的对象。看例子:function to_green(){ this.style.color="green";} to_green...
js中this代表什么意思?
JavaScript 中的 this 一直是容易让人误用的,尤其对于熟悉 Java 的程序员来说,因为 JavaScript 中的 this 与 Java 中的 this 有很大不同。在一个 function 的执行过程中,如果变量的前面加上了 this 作为前缀的话,如this.myVal,对此变量的求值就从 this 所表示的对象开始。this 的值取决于 ...
JavaScript中的this到底是什么(一)_javascript技巧
在这些语言里,this含义非常明确,就是指向当前的对象实例,我们用起来也是相当的放心。然而,到了JavaScript这个动态语言里,this的写法没变,但是其含义却大大地不同了,下面用实例说明,使用浏览器为Firefox14.0.1.首先,Hello World o(^_^)o本人从刚开始自学javascript这门灵活的编程语言到现在,也有...
帮忙解释js 中的this.value
this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。value就是这函数对象的值
this和arguments的意思
this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象。但是在javascript中,由于javascript的动态性(解释执行,当然也有简单的预编译过程),this的指向在运行时才确定。这个特性在给我们带来迷惑的同时也带来了编程上的自由和灵活,结合apply(call)方法,可以使JS变得...
js面试常见的问题
1.如何理解 JS 中的`this`关键字?JS 初学者总是对 this 关键字感到困惑,因为与其他现代编程语言相比,JS 中的这this关键字有点棘手。 “this” 一般是表示当前所在的对象,但是事情并没有像它应该的那样发生。JS中的this关键字由函数的调用者决定,谁调用就this就指向哪个。如果找不到调用者,...