javascript之this指针

this是与该执行上下文相关的特殊对象。因此,它可以称为上下文对象(比如,在执行上下文的对象就是激活对象)。

任何对象都可以被作为上下文的this的值。需要澄清一些错误的描述对于ECMAScript的执行上下文,和this的值。

经常,this的值,错误的描述成变量对象的属性。最近就在一本书就发现了这个错误(尽管,这本书的相关章节很不错)。

请牢记:

  this 是该上下文的属性,而不是变量对象的属性。

这个特性很重要的,因为不同于变量,this 从不参与变量解释的过程。当在代码中访问this,它的值是直接从

该执行上下文取得的,不会从作用域里查找的。当进入到上下文时,this的值就会被唯一确定了。

顺便提一下,和ECMAScript对比,Python同样有自己的 self 参数作为简单的变量去解决这个问题,并且改变在执行期间。

在ECMAScript里,这是不可能的重新对this赋值,因为,重复一下,它不是一个变量,也不属于变量对象。

在全局上下文,this 的值是全局对象自己(这就是说,this的值在这里是等于变量对象的):

var x = 10;

console.log(
    x, // 10
    this.x // 10
    window.x  // 10
);

对于函数的上下文,this的值在每个单一函数可以不同的。this的值是由那调用者来决定的通过调用函数表达式(比如,

函数的调用方式)。举个例子, 函数 foo 是被调用者,是被全局上下文调用的,这个上下文是调用者。让我们一起看看,

对于同一个函数,通过不同的调用者,this的值是怎么不同的:

// the code of the "foo" function
//never changes, but the "this" value
//differs in every activation

function foo(){
    alert( this );
}

foo(); // global object
foo.prototype.constructor(); // foo.prototype

var bar = {
    baz: foo
};

bar.baz(); // bar

(bar.baz()); // also bar
(bar.baz = bar.baz)(); // but here is global object
(bar.bar, bar.bar)();  //also global object
(false || bar.baz)(); //also global object

var otherFoo = bar.baz();
otherFoo();   // again global object
时间: 2024-10-26 20:59:25

javascript之this指针的相关文章

javascript中this指针探讨

javascript是一门类java语言有很多跟java相类似的特点,但也仅是类似而已,真正使用中还是有很大的差别.this指针常常让很多初学者抓狂,本人也曾为此困惑不解,查找过很多资料,今天在这里总结一下,希望能帮助后来者更快驯服这只拦路虎.网上有很多讲解this指针的文章其中不乏精品,以我看来了解this指针关键在于掌握javascript中函数的四种调用模式.那么什么是调用?调用指的是跟在任何产生一个函数值的表达式之后使用"()",obj.f()这种方式成为调用,obj.f这种方

JavaScript中的指针

引用:http://developer.51cto.com/art/201103/250108.htm 对JavaScript中call和apply的理解 1.相同点: a) 产生的效果或作用完全相同: b) 至少有一个参数: c) 第一个参数必须有且是一个对象(Object),因为就是这个家伙偷懒. 2.不同点: 传递参数的方式. 前提: 1.有两个对象: A和B: 2.B有一个方法(这里用Function代替): 3.B的方法(Function)有两种参数传递的方式,但该方法产生的结果一样.

JavaScript——对this指针的新理解

一直以来对this的理解只在可以用,会用,却没有去深究其本质. 这次,借着<JavaScript The Good Parts>,作了一次深刻的理解. 下面我们一起来看看这个this吧. 在我们声明一个函数时,每个函数除了有定义时的parameters(形参),自身还会有额外的两个参数,一个是this,一个是arguments(实参).arguments就是函数实际接受到的参数,是一个类数组.arguments我只做个简略的介绍,重点我们放在this指针上. 在面向对象变成中,this十分重要

图说js中的this——深入理解javascript中this指针

没搞错吧!js写了那么多年,this还是会搞错!没搞错,javascript就是回搞错! ………… 文章来源自——周陆军的个人网站:http://zhoulujun.cn/zhoulujun/html/webfront/ECMAScript/jsBase/2016_0329_7729.html 在写java的时候,this用错了,idea都会直接报错! 比如…… 但是,js,……idea,爱莫能助了…… 在面向对象编程里有两个重要的概念:一个是类,一个是实例化的对象,类是一个抽象的概念,用个形象

JavaScript——对this指针的理解

在我们声明一个函数时,每个函数除了有定义时的parameters(形参),自身还会有额外的两个参数,一个是this,一个是arguments(实参).arguments就是函数实际接受到的参数,是一个类数组.arguments我只做个简略的介绍,重点我们放在this指针上. 在面向对象变成中,this十分重要,它的值取决于调用的模式.而在JavaScript中,一共有4中调用模式:方法调用模式.函数调用模式.构造函数调用模式.apply调用模式. 方法调用模式 当一个函数是作为一个对象的属性时,

JavaScript——对this指针的四种模式

一直以来对this的理解只在可以用,会用,却没有去深究其本质. 这次,借着<JavaScript The Good Parts>,作了一次深刻的理解. 下面我们一起来看看这个this吧. 在我们声明一个函数时,每个函数除了有定义时的parameters(形参),自身还会有额外的两个参数,一个是this,一个是arguments(实 参).arguments就是函数实际接受到的参数,是一个类数组.arguments我只做个简略的介绍,重点我们放在this指针上. 在面向对象变成中,this十分重

JavaScript之this指针深入详解

javascript中的this含义非常丰富,它可以是全局对象,当前对象或者是任意对象,这都取决于函数的调用方式.函数有以下几种调用方式:作为对象方法调用.作为函数调用.作为构造函数调用.apply或call调用. 对象方法调用 作为对象方法调用的时候,this会被绑定到该对象. var point = { x : 0, y : 0, moveTo : function(x, y) { this.x = this.x + x; this.y = this.y + y; } }; point.mo

JavaScript中this指针指向的彻底理解

this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 这一点与函数中自由变量Action-varibal不同 1 var object = { 2 name : 'The Kite Runner', 3 obj : { 4 name : 'childProperty', 5 fn : function(x, y){ 6 var result = x + y; 7 console.log('this-context'

javascript从定义到执行 js引擎 闭包

javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境 栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链等,这些概念正是JS引擎工作的核心组件.这篇文章的目的是孤立的为你讲解每一个概念,而 是通过一个简单的demo来展开分析,全局讲解JS引擎从定义到执行的每一个细节,以及这些概念在其中所扮演的角色. var x = 1;  //定义一个全局变量 x function A(y){ var x = 2;