代码之家  ›  专栏  ›  技术社区  ›  Nara

在严格模式下编写脚本时,获取无法读取属性“any”类型错误

  •  0
  • Nara  · 技术社区  · 8 年前

    使用时 strict mode type error 访问 var 使用 this .

    "use strict";
    var bar = "global";
    
    function foo() {
        console.log(this.bar);
    }
    
    
    
    var obj1 = {
        bar: "obj1",
        foo: foo
    };
    
    var obj2 = {
        bar: "obj2"
    };
    
    foo();
    
    obj1.foo();
    foo.call(obj2);
    new foo();

    屏幕截图:

    enter image description here

    foo(); "use strict"

    2 回复  |  直到 7 年前
        1
  •  3
  •   T.J. Crowder    8 年前

    在严格模式下,当您调用函数而不做任何设置其 this undefined foo

    1. 在全球范围内 foo.call(this); (自

    2. foo.call(window); (自 window

    以下是#1的示例:

    "use strict";
    var bar = "global";
    
    function foo() {
        console.log(this.bar);
    }
    
    
    
    var obj1 = {
        bar: "obj1",
        foo: foo
    };
    
    var obj2 = {
        bar: "obj2"
    };
    
    foo.call(this); // <=== changed
    
    obj1.foo();
    foo.call(obj2);
    new foo();

    ...和#2:

    "use strict";
    var bar = "global";
    
    function foo() {
        console.log(this.bar);
    }
    
    
    
    var obj1 = {
        bar: "obj1",
        foo: foo
    };
    
    var obj2 = {
        bar: "obj2"
    };
    
    foo.call(window); // <=== changed
    
    obj1.foo();
    foo.call(obj2);
    new foo();
        2
  •  -1
  •   DankMeme420    8 年前
    function foo() {
        console.log(this.bar);
    }
    

    function foo() {
       console.log(window.bar);
       console.log(bar);
    }