“这个”是什么意思?指的是使用它的函数被称为“new myFunction(“Hello”)`

发布于 2024-10-09 06:38:47 字数 406 浏览 2 评论 0原文

function myFunction(message)
{
this.message = message;
return this.message;
}

document.body.innerHTML = new myFunction("Hello");

我了解到“在 JavaScript 中 this 始终指的是我们正在执行的函数的‘所有者’,或者更确切地说,指的是函数所属的对象。” reference

在此示例中,myFunction 中的 this 似乎应该引用myFunction 然后是窗口。不过,它似乎指的是 myFunction 。这是为什么呢?

function myFunction(message)
{
this.message = message;
return this.message;
}

document.body.innerHTML = new myFunction("Hello");

I learnt that "in JavaScript this always refers to the 'owner' of the function we're executing, or rather, to the object that a function is a method of." reference

In this example it would seem that the this in myFunction should refer to the owner of the myFunction then, the window. It seems like it's referring to the myFunction though. Why is this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北渚 2024-10-16 06:38:47

当您使用 new 运算符时,您会创建 构造函数this引用新对象。

通过添加 new 关键字完全改变了问题之前的旧答案:

因为 myFunction 未使用 new 关键字调用,或者在显式上下文中调用另一个对象,它实际上是: document.body.innerHTML = window.myFunction("Hello");

所以 thiswindow 对象。

您可以通过将函数编辑到 console.log 来确认这一点,无论 this 是什么,然后在 Firebug 中查找。< /删除>

When you use the new operator, you create a new instance of an object defined in the constructor function and this refers to the new object.

Old answer before the question was completely changed by the addition of the new keyword:

Since myFunction is not being called with the new keyword, or in the explicit context of another object, it is effectively: document.body.innerHTML = window.myFunction("Hello");

So this is the window object.

You can confirm this by editing the function to console.log whatever this is and then looking in Firebug.

月牙弯弯 2024-10-16 06:38:47

如果您调用 new myFunction("hello"),则 this 引用一个继承自函数的新“空”对象(它不引用该函数!)原型属性(myFunction.prototype)。

这样的函数也称为构造函数,并且习惯上名称以大写字母开头。

If you call new myFunction("hello"), then this refers to a new "empty" object (it does not refer to the function!) that inherits from the functions prototype property (myFunction.prototype).

Such a function is also called constructor function and it is convention to start the name with a capital letter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文