zoukankan      html  css  js  c++  java
  • JavaScript老梗之this对象

    Js中的this关键词貌似是初学者必经的坑 都不例外 我们经常听到其他人说 this对象谁调用指向谁 的确这是最容易理解的 但是我们可以更加深入的去探索下 加深印象以便更加灵活的适用它

    这里不得不提下Js的执行环境 它都有一个变量对象(variable object)这个变量对象是代码访问不到的 只存在后台的 保存在内存中的

    执行环境顾名思义就是在运行和执行代码的之后才会存在的 例如我们运行浏览器 就相当于创建了全局环境 这个全局环境属于浏览器的 所以浏览器中全局对象是window对象

    this,arguments这些内部对象只和Js的执行环境有关和它的声明环境无关 而执行环境又是在代码执行的时候创建的 所以this对象只有在执行运行的时候才确定到底指向什么对象

    常用this调用的几个方式

    1 作为函数调用

    var name = 'zzz' ;

    function myFn() {

    console.log(this.name) ;

    }

    myFn() ;//zzz 此时this指向的是window

    2作为对象的方法调用 (延续上面例子 我们添加个对象把myFn赋给对象的方法)

    var name = 'zzz' ;

    function myFn() {

    console.log(this.name) ;

    }

    var obj = {name:'zwq'} ;

    obj.myFn = myFn ;

    obj.myFn() ;//zwq 通过(.或者[])查找对象属性方法称“方法调用”

    3 构造函数中的this(顾名思义可以构造一个对象的函数 也是函数的一种)

    function Fn() {

    this.name = 'zwq' ;

    this.job = 'engineer'

    }

    var fn = new Fn() ;(没有prototype只有__proto__)

    console.log(fn.name)//zwq

    适用new操作符创建函数实例的时候 会发生以下几个过程 1.创建一个对象 2。将构造函数的作用域赋给新对象 3.相当于运行构造函数中代码 所以此时this指向了新对象 4.返回新对象

    console.log(Fn.__proto__===Function.prototype,Function.prototype.__proto__===Object.prototype,Object.prototype.__proto__===null)//ps:原型链的结构

    4 apply和call调用

    Js中一切都是对象最为突出的是 函数也是对象 函数对象都拥有call和apply方法 该方法是为了动态改变this而出现的 当某一个对象不想自己写方法 就可以通过apply调用其它对象的方法或者一个函数

    function sayName() {
    console.log('myname is:'+this.name) ;
    }
    var student = {
    name: 'zwq' ,
    age: '20'
    }
    sayName.apply(student) ;// myname is:zwq 这里我们希望student对象有一个方法而自己又不想重新定义 就可以借助apply和call用其他方法来操作 这里this指向student

    总结 时刻记住this的指向不是声明静止的 是动态的 总是随着函数执行的时候绑定!!!!

  • 相关阅读:
    Linux命令: ls -l显示文件和目录的详细资料
    Linux命令: ls -F
    Linux命令: pwd显示工作路径
    Linux命令: cd /home 进入'/home'目录
    Linux命令: cd ../.. 返回上两级目录
    Linux命令: cd
    boost::mpl::eval_if的使用方法
    【block第四篇】实现
    Android中pendingIntent的深入理解
    hdu 1565 方格取数(1)(状态压缩dp)
  • 原文地址:https://www.cnblogs.com/Zwq286179/p/6016218.html
Copyright © 2011-2022 走看看