• 一点思考


    JavaScript函数中的this指代的是全局变量,那构造函数呢?

    测试代码如下:

    1. 当做一般函数调用Cat();

    function Cat(name){
      var arr = Object.getOwnPropertyNames(this);
      console.log(arr.length);               // 722
    }
    
    Cat("Black Cat");

    arr.length=722,我们判定调用一般函数时,this指代的是全局对象。

    2. 当做构造函数调用;

    function Cat(name){
      var arr = Object.getOwnPropertyNames(this);
      console.log(arr.length);
    }
    
    var cat = new Cat("Black Cat");

    array.length = 0, 我们判定调用构造函数时,this指定的是new出来的那个对象。

    总结:对于this值,JavaScript权威指南中是这样表述的——函数调用中,调用上下文(this的值)是全局对象或undefined;方法调用中,调用上下文(this的值)为调用方法的对象。

    构造函数=构造函数.prototype.constructor,因此,构造函数是方法 ~ 

    apply()和call()

    聊天记录

    那为什么apply()方法第一个参数可以传入null 呢?
    是这样  这个函数的第一个参数 如果没指定 就会指定为全局对象

    第一参数是必须传的,不传会报错,想传,但不想给值,所以就传个null.  这个既能通过js语法的验证,又能达到逻辑任务的目的。是一箭双雕的活。

    如果指定,那这个方法的this就是指向那个指定的,如果没有,或传的null,那就是windows,js里边最大的带头大哥就是这货。
     .call表明上是调了一个方法,其实隐式的意思是改变了调用方法后的this指向。这是关键。
     如果搞不懂,就先多写写代码,尝试了解js语言的灵活性,从其它侧面了解this的威力,然后回头在看就不是这么困难了,豁然开朗就是说这种情况的。
     为什么要改变this的指向,为什么能改变?这就是语言本身的灵活。改变之后有什么好处?先写写其它的代码,了解js的全局观。从大处着眼,小处研究。然后回头在来弄。
    call基本就是借方法 你不说谁借的就当是全局对象借的.
     null 或者不传 本质就是Global 浏览器上就是window.

    一点发现

    在函数中,如果函数参数是变量argument时,好像无法直接调用函数,只能使用apply的副作用?

    为什么要使用apply()和call()

  • 相关阅读:
    mysql索引
    mysql中的事务
    mysql的各种join连接
    java集合-LinkedList源码分析
    java集合(二)-ArrayList源码分析
    java集合(一)-集合概述
    java并发(五)-重排序、 happens-before
    vue引入百度地图 --BMap is not defined ,eslint BMap报错
    红星美凯龙前端面试内容总结
    vue父子组件钩子函数的执行顺序
  • 原文地址:https://www.cnblogs.com/linxd/p/4437726.html
Copyright © 2020-2023  润新知