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

时间:2011-04-11 00:40:34

标签: javascript oop

我正在努力学习将面向对象的原则应用到我的Javascript编程中,但是我对如何在Javascript中使用对象“fields”或“methods”感到困惑。我知道属性可以动态分配给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"创建了bar对象的新foo属性(或字段),并为其赋值"abc"。但是,当我调用foo的另一种方法时,bar属性似乎已消失。

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

1 个答案:

答案 0 :(得分:3)

JavaScript函数在上下文中执行,该上下文确定函数内部this引用的内容。当您创建这样的新foo对象时:

var f = new foo();

...然后this引用新对象。但是,省略new运算符时,如下所示:

var f = foo();

...然后上下文是全局window对象。在这种情况下,这一行:

this.bar = "abc";

...设置window上的属性值,新对象。