JavaScript“this”关键字基于属性名

时间:2017-07-11 16:21:53

标签: javascript html

虽然learning javascript,但我遇到了一个根据属性名称而行为不同的示例。

  • 在案例1中,它打印undefined(这是可以理解的)
  • 在案例2中,它不打印任何内容(FF 54)或一些异常代码(运行此脚本时看到)

问题

为什么在更改属性名称时会出现不同的行为?

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>tests</title>
  <script>
    "use strict";
  </script>
</head>

<body>
  <ul>
    <li>Case 1 <br>
      <script>
        let myAbstractObject2 = {
          text1: "someText",
          someMethod1() {
            document.write(`[Output] text1 = ${this.text1}!<br>`);
          }
        };

        myAbstractObject2.someMethod1();

        (true ? myAbstractObject2.someMethod1 : null)();
      </script>
    </li>
    <li>Case 2 <br>
      <script>
        let myAbstractObject3 = {
          name: "someText",
          someMethod1() {
            document.write(`[Output] name = ${this.name}!<br>`);
          }
        };

        myAbstractObject3.someMethod1();

        (true ? myAbstractObject3.someMethod1 : null)();
      </script>
    </li>
  </ul>
</body>

</html>

1 个答案:

答案 0 :(得分:4)

如果是第2号,this.name会引用window.name。这就是你获得GUID的原因。

它基本上与案例1相同(this归结为窗口全局属性),除了您使用的关键字是窗口全局属性的已定义属性。