zoukankan      html  css  js  c++  java
  • javascript之this

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

    应用情形1:如果一个函数fn中有this,这个函数又被上一级的对象所调用(obj.fn()),那么this指向的就是上一级的对象obj。

    应用情形2:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象。

    var obj = {
      a: 1,
      b: {
        name: 'emily',
        fun: function(val) {
          console.log(this.a,'--',val);
        }
      } 
    }

    应用情形3:如果一个函数fn中有this,但是该函数没有被上一级的对象所调用(直接调用fn()),那么this指向的就是window,这里需要特别说明的是在js的严格模式('use strict')中this指向的不是window,而是指向undefined。

    obj.b.fun('this指向上一级对象b');//尽管对象b中没有属性a,这个this指向的也是对象b,因为this只会指向它的上一级对象,不管这个对象中有没有this要的东西。
    var j = o.b.fun;
    j('指向window');
    应用情形4:构造函数this,示例如下
      这里之所以对象newFn可以点出函数Fn里面的user是因为new关键字可以改变this的指向,将这个this指向对象newFn,为什么说newFn是对象,因为用了new关键字就是创建一个对象实例,我们这里用变量newFn创建了一个Fn的实例,此时仅仅只是创建,并没有执行,而调用这个函数Fn的是对象newFn,那么this指向的自然是对象newFn
    function Fn() {
    this.value = 'Fn的构造函数this';
    }
    var newFn = new Fn();
    console.log(fna);// 输出 Fn {user: "Fn构造函数this"}

     

  • 相关阅读:
    2020.9.21
    企业应用架构模式003——对象-关系结构模式
    企业应用架构模式002
    企业应用架构模式001
    代码大全003/
    代码大全002/
    每日总结
    数论必刷题
    Tarjan求割点(割顶) 割边(桥)
    Luogu 2018 秋令营 Test 2
  • 原文地址:https://www.cnblogs.com/emilyzz/p/14066757.html
Copyright © 2011-2022 走看看