对Javascript对象属性/字段感到困惑

Confused about Javascript object properties/fields

本文关键字:字段 Javascript 对象 属性      更新时间:2023-09-26

我正在努力学习将面向对象的原理应用到我的Javascript编程中,但我对对象"字段"或"方法"在Javascript中的工作方式感到困惑。我知道属性可以动态地分配给Javascript对象(函数(,但我似乎不明白如何在实践中应用这一点。

考虑以下示例代码片段:

<head>
<script type="text/javascript">
var foo = function()
{
    this.bar = "abc";
    alert(this.bar);
}
foo.start = function()
{
    alert(foo.bar);
}
</script>
</head>
<body>
<div align='center'>
<input type="submit" onclick = "foo(); foo.start();">

单击提交按钮时,会显示消息abc,然后是undefined

这个输出与我在这里的理解和意图相反。我的理解是,行this.bar = "abc"创建了foo对象的一个新的bar属性(或字段(,并为其指定值"abc"。然而,当我调用foo的另一个方法时,bar属性似乎已经消失了。

那么,当我在foo.start中访问foo.bar时,为什么它是未定义的呢?

JavaScript函数在一个上下文中执行,该上下文确定this在函数内部引用什么。当您创建一个新的foo对象时,如下所示:

var f = new foo();

则CCD_ 13指代新对象。但是,当省略new运算符时,如下所示:

var f = foo();

则上下文是全局CCD_ 15对象。在这种情况下,这行:

this.bar = "abc";

设置window的属性值,而不是新对象。