• 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()方法接收一个参数的时候,在数组中要在第一个参数后面加上逗号” , ”;给予区分。

  • 相关阅读:
    推荐系统的常用算法原理和实现
    Maven入门教程
    JAVA设计模式(三)建造者模式
    Java并发编程核心方法与框架-Future和Callable的使用
    Java并发编程核心方法与框架-TheadPoolExecutor的使用
    Java并发编程核心方法与框架-Executors的使用
    Java并发编程核心方法与框架-phaser的使用
    Java并发编程核心方法与框架-CyclicBarrier的使用
    Java并发编程核心方法与框架-CountDownLatch的使用
    Java并发编程核心方法与框架-exchanger的使用
  • 原文地址:https://www.cnblogs.com/jayafs/p/6225815.html
Copyright © 2020-2023  润新知