以下代码中Javascript的行为如何表现?

时间:2015-07-04 05:29:40

标签: javascript this javascript-objects

我是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.whatIsThis() = [Something] //how it came?

 WhatIsThis() = [object Window] 

 WhatIsThis.call(314) = 314 

2 个答案:

答案 0 :(得分:0)

对于直接调用的def getbook(): bookname = input("What is the name of the text file?") bookFile = open(bookname, 'r') bookString = bookFile.read() lowerBook = bookString.lower() wordList = lowerBook.split() return wordList import string def listAllThe(longString): theList = set() for i in longString: if i.startswith('the'): theList.add(i) return theList def final(): book = getbook() getList = listAllThe(book) print (getList) final() 函数,WhatIsThis()在这种情况下是this。虽然您对该对象window进行了o.whatIsThis()

this

它将其显示为字符串的o.whatIsThis() -> return this (for "o") -> "[Something]" 方法,其中显示toString()

答案 1 :(得分:-2)

在第一次调用中,调用的是o.WhatIsThis()

o是Something()的函数产品。因此,当您致电o时,您在技术上正在调用Something()的实例。

o.WhatIsThis()被调用,

this.WhatIsThis =返回this [见WhatIsThis()]

然后this.toString =this变为this.to String = "[Something]"

所以你的回复o.whatIsThis() = [Something]

Second

直接调用WhatIsThis(),因此返回浏览器窗口对象。您可以尝试向控制台说this,它将返回window object

Third

WhatIsThis.call(314),一个争论被传递,但没有定义争论列表,因此,这实际上成为你提供该功能的争论。

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

因此this会返回314