zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Java动态绑定和静态绑定-多态
    Java方法内联
    Java反射机制及原理
    Jvm-类加载机制
    Zookeeper 源码解析-环境准备
    SpringMvc源码解析
    Java虚拟机的意义
    起跑线
    js动态生成html,onclick事件失效解决方法
    虚拟机能ping通,但是telnet某个端口却不行
  • 原文地址:https://www.cnblogs.com/branches/p/4888509.html
Copyright © 2011-2022 走看看