zoukankan      html  css  js  c++  java
  • JS this指向

    正常模式

    在正常模式下独立函数的的 this 指向 undefined window。

    <script type="text/javascript">
        function func() {
            return this.name;
        }
    
        var arg = {
            name: 'xxx',
            age: 20,
        };
    
        r = func();
        alert(r);
    
    </script>

    说明:

    这段代码的执行,会弹出没有内容的空白框,func中的this默认的window,但是window中并没定义name变量,所以获取不到

    如果代码是这样的便能获取:

    <script type="text/javascript">
        var name = 'ooo';
        function func() {
            return this.name;
        }
    
        var arg = {
            name: 'xxx',
            age: 20,
        };
    
        r = func();
        alert(r);
    
    </script>

    说明:

    此时我们定义了一个全局变量,变量属于window,所以此时this指向window的name便有值。

    strict模式

    strict模式下,this的执行是可以控制的,但是要借助函数本身的 apply() call() 方法。

    apply()

    要指定函数的this指向那个对象。可以使用函数本身的apply方法;这个方法接收2个参数:

    1. 第一个参数就是this指向的对象名。
    2. 可选参数;第二个参数是一个Array,表示函数本身的参数。
    <script type="text/javascript">
        function func() {
            return this.name;
        }
    
        var arg = {
            name: 'xxx',
            age: 20,
        };
    
        r = func.apply(arg);
        alert(r);
    
    </script>
    apply

    结果:

    image

    说明:

    此时的this指向arg这个对象。

    func函数本身没接收参数,所以这里省略了apply的第二个参数。

    call()

    call()方法和apply()方法很像只是他们接收的第二个参数形式不一样

    • apply()是将参数打包成Array再传入。
    • call()是参数按顺序传入。
    <script type="text/javascript">
        function func(n) {
            return this.name + n;
        }
    
        var arg = {
            name: 'xxx',
            age: 20,
        };
    
        r = func.call(arg, 'OK');
        alert(r);
    
    </script>
    call

    结果:

    image

    上面代码如果换成apply():

    <script type="text/javascript">
        function func(n) {
            return this.name + n;
        }
    
        var arg = {
            name: 'xxx',
            age: 20,
        };
    
        r = func.apply(arg, ['OK', ]);
        alert(r);
    
    </script>
    apply

    注意:

    apply()方法接收一个参数的时候,在数组中要在第一个参数后面加上逗号” , ”;给予区分。

  • 相关阅读:
    centos、mac的grafana安装和简单使用
    通过k8s(Kubernetes)搭建jmeter的压测环境master-slave架构,实现弹性伸缩
    burpsuite破解版
    jvm调优
    火狐firefox、谷歌chrome等浏览器扩展、插件介绍
    关于Chrome谷歌浏览器开发者工具网络Network中返回无数据的问题
    微博登录过程分析
    SQL SERVER大话存储结构(4)_复合索引与包含索引
    千万级别数据表,单列索引和多列索引性能对比
    Showplan 逻辑运算符和物理运算符参考
  • 原文地址:https://www.cnblogs.com/jayafs/p/6225815.html
Copyright © 2011-2022 走看看