Почему область действия неправильна на консоли MS Edge в точках останова? - PullRequest
0 голосов
/ 13 июня 2019

Я обнаружил, что в MS Edge, когда я использую оператор debugger; или точку останова, область действия this всегда является глобальной областью действия (например, объектом Window) независимо от того, что является областью действия thisгде код на самом деле нарушается.

Например, следующий код находится внутри конструктора (таким образом, this является , а не глобальным объектом!):

this.myString = "hello";

// returns the current function scope [object Object]
console.log(this);

// returns "hello"
console.log(this.myString);

var fakeThis = this;


/* In this breakpoint, typing:
 * `this` returns [object Window]
 * `this.myString` returns undefined
 * `fakeThis` returns the correct function scope
 * `fakeThis.myString` returns "hello".
*/
debugger; 

Является ли это известной ошибкой сконсоль MS Edge или есть что-то конкретное, что может быть причиной этого?

1 Ответ

1 голос
/ 14 июня 2019

Не могу воспроизвести проблему на моей стороне (с помощью Microsoft Edge 44.18362.1.0), похоже, что все работает хорошо на моей стороне, снимок экрана как this , и пример кода, как показано ниже:

<p id="demo"></p>

<script>
    // Constructor function for Person objects
    function Person(first, last, age, eye) {
      this.firstName = first;
      this.lastName = last;
      this.age = age;
        this.eyeColor = eye;

        this.myString = "hello";
        // returns the current function scope [object Object]
        console.log(this);
        // returns "hello"
        console.log(this.myString);
        var fakeThis = this;

        /* In this breakpoint, typing:
         * `this` returns [object Window]
         * `this.myString` returns undefined
         * `fakeThis` returns the correct function scope
         * `fakeThis.myString` returns "hello".
        */
        console.log(this);
        console.log(this.myString);
        console.log(fakeThis);
        console.log(fakeThis.myString);
        debugger; 
    }

    // Create a Person object
    var myFather = new Person("John", "Doe", 50, "blue");

    // Display age
    document.getElementById("demo").innerHTML = "My father is " + myFather.age + ".";
</script>

Пожалуйста, попробуйте очистить кэш и историю, затем повторно протестируйте свой код.Кроме того, вы можете создать новую страницу для проверки кода выше, проверить, работают ли они на вашей стороне.

...