我正在努力学习将面向对象的原则应用到我的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
未定义?
答案 0 :(得分:3)
JavaScript函数在上下文中执行,该上下文确定函数内部this
引用的内容。当您创建这样的新foo
对象时:
var f = new foo();
...然后this
引用新对象。但是,省略new
运算符时,如下所示:
var f = foo();
...然后上下文是全局window
对象。在这种情况下,这一行:
this.bar = "abc";
...设置window
上的属性值,不新对象。