![](/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.