js中的this(四种绑定)

js中的this(四种绑定)

默认绑定

非严格模式下:

        var bar=2021;
        function foo(){
            var bar=1998;
            console.log(this.bar);
        }
        foo();//2021

严格模式下:

        "use strict"
        var bar=2021;
        function foo(){
            var bar=1998;
            console.log(this.bar);
        }
        foo();//Uncaught TypeError: Cannot read property ‘bar‘ of undefined

隐式绑定

        var foo=1998;
        function bar(){
            console.log(this.foo);
        }
        var obj={
            foo:2021,
            bar:bar       
        }
        obj.bar();//2021

隐式丢失

var foo=1998;
        function bar(){
            console.log(this.foo);
        }
        var obj={
            foo:2021,
            bar:bar       
        }
        var baz=obj.bar;
        baz();//1998
        var foo=1998;
        function bar(){
            console.log(this.foo);
        }
        var obj={
            foo:2021,
            bar:bar       
        }
        setTimeout(obj.bar,0)//1998
        //setInterval和setTimeout中如果出现this,那么这个this指向的是window对象

硬绑定

        var foo="我是全局 foo";
        function bar(){
            console.log(this.foo);
        }
        var obj1={
            foo:"我是obj1 foo",
            bar:bar       
        }
        var obj2={
            foo:"我是obj2 foo",
        }
        var obj3={
            foo:"我是obj3 foo"
        }
        obj1.bar.apply(obj2)//我是obj2 foo
        obj1.bar.call(obj3)//我是obj3 foo

new绑定

 var foo="我是全局 foo";
        function bar(foo){
            this.foo=foo;
        }
        var baz=new bar("新传的bar");
        console.log(baz.foo);//新传的bar

js中的this(四种绑定)

上一篇:20201214 Json与pickle数据序列化


下一篇:js 模块化 -- export 时 一个默认和多个默认的写法