![](/img/trans.png)
[英]Why am i getting this error: “Uncaught TypeError: Cannot read property 'Title' of undefined”?
[英]Why am I getting this error: Uncaught TypeError: cannot read property 'john' of undefined
我是JavaScript的新手,可能没有使用正确的术语,所以请耐心等待。
我希望页面上显示以下内容您好我的名字是John Smith,我今年29岁。 您好,我的名字是Suzie Alport,我今年24岁。
我想明白为什么Suzie不能提到John的问候方法?
<script>
var employees = {
john: {
name: "John Smith",
age: 29,
job: "web developer",
greet: function(){
document.write("Hello my name is " + this.name + " and I am " + this.age + " years old. ");
}
},
suzie: {
name: "Suzie Alport",
age: 24,
job: "nursery assistant",
greet: employees.john.greet
}
};
employees.john.greet();
employees.suzie.greet();
</script>
谢谢
当您创建要分配给suzie
属性的对象时, employees
是undefined
。 在整个表达式完成之前评估属性初始值设定项。
以下是事情发生的顺序:
employees
的变量,其初始值为undefined
。 employees
)。 john
属性值)。 "John Smith"
并在#3名为name
的空白对象上创建一个属性,为其赋予该值。 age
, job
和greet
。 john
属性。 suzie
)。 "Suzie Alport"
并在#7 name
为对象创建一个属性,赋予它该值。 age
和job
的过程。 employees.john.greet
表达式并因为employees
undefined
而失败。 如果你把它分成两部分,它可以工作(直到document.write
搞砸了):
var employees = {
john: {
name: "John Smith",
age: 29,
job: "web developer",
greet: function(){
document.write("Hello my name is " + this.name + " and I am " + this.age + " years old. ");
}
}
};
employees.suzie = {
name: "Suzie Alport",
age: 24,
job: "nursery assistant",
greet: employees.john.greet
};
employees.john.greet();
employees.suzie.greet();
这是有效的,因为在我们尝试评估employees.john.greet
之前,已将对上面#2中创建的对象的引用分配给employees
变量。
边注:
避免在现代网页和应用程序中使用document.write
。 相反,使用DOM方法 。 document.write
仅在初始页面加载期间以您希望的方式工作; 在初始页面加载后,它将完全擦除现有文档并开始在同一窗口中编写新文档。
例如,您可以将段落附加到document.body
如下所示:
function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.