下面代码中的“this”在Javascript中的行为如何?
我是一个JS初学者。 我正在通过一段代码来理解这个关键字在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;
<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]"