我是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
上面#2中的对象的属性。suzie
)。"Suzie Alport"
在名为#的对象上评估并在该对象上创建属性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);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句