下面代码中的“this”在Javascript中的行为如何?

下面代码中的“this”在Javascript中的行为如何?,javascript,this,javascript-objects,Javascript,This,Javascript Objects,我是一个JS初学者。 我正在通过一段代码来理解这个关键字在Javascript中的用法。 但我不了解流程,也不了解输出是如何产生的 <html> <body> <script> function WhatIsThis() { return this; } function Something() { this.whatIsThis = WhatIsThis;

我是一个JS初学者。 我正在通过一段代码来理解这个关键字在Javascript中的用法。 但我不了解流程,也不了解输出是如何产生的

<html>
 <body>
  <script>
      function WhatIsThis() {
          return this;
      }

      function Something() {
          this.whatIsThis = WhatIsThis;
          this.toString = function () { return "[Something]" };
      }

      var o = new Something();

      document.writeln("o.whatIsThis() = " +
    o.whatIsThis());
      document.writeln("<br />");
      document.writeln("WhatIsThis() = " +
    WhatIsThis());
      document.writeln("<br />");
      document.writeln("WhatIsThis.call(314) = " +
    WhatIsThis.call(314));
  </script>
 </body>
</html>

在第一个调用中,发生的是o

o是某物的函数积。因此,当你调用o时,从技术上讲,你是在调用某事物的实例

o、 这叫什么,这样,

this.WhatIsThis=返回此[请参见WhatIsThis]

然后this.toString=将其转换为this.toString=[某物]

所以你的调用返回o.whatIsThis=[某物]

第二

WhatIsThis被直接调用,因此它返回browser窗口对象。您可以尝试对控制台说这句话,它将返回窗口对象

第三

WhatIsThis.call314,传递了一个参数,但没有定义参数列表,因此,这实际上成为您提供函数的参数

就像魔杖服从拥有它的巫师一样。314拥有它

因此,它返回314。

对于这个函数直接调用的是什么,在这种情况下是窗口。虽然当你在物体上做o.Whatis时,它是在尊重方面

o.whatIsThis() -> return this (for "o") -> "[Something]"

它将其显示为字符串的toString方法,其中显示了[Something]。

我建议您阅读以了解Javascript中如何确定此值。Javascript有五种主要的设置方法——答案中都有描述。因为这被标记为重复:o.whatistithis->this for object o。因为它是一个字符串,所以它将对象表示为toString方法中的字符串。其中返回[Something]。您不应该在普通函数调用中引用它。在这种情况下,它不是一个有用的值。在严格模式下,它将是未定义的。在非严格模式下,它将只是浏览器中的窗口对象。你根本不应该这样使用它。当您使用构造函数和新运算符创建对象时,或者在对象的内部方法或事件处理程序内部,调用方将其值设置为特定值时,将其用于对象引用。这段代码有严重的缺陷——缺陷如此之大,实在不值得解释为什么每一行都有它的功能。@jfriend00我想是的,这里让我们给他们一些可怕的代码,没有人会写,看看他们是否理解它是一种练习。代码类型,以前在编程书籍中看到过一些可怕的代码。
o.whatIsThis() -> return this (for "o") -> "[Something]"