![](/img/trans.png)
[英]Property of object is undefined, even though console.log on object is showing the property value
[英]Object property called with dot notation showing console.log 'undefined'
Javascript 相當新。
我能否解釋一下為什么 displayMyList 的 object 屬性在使用點符號日志作為“未定義”訪問時,但是當放入 function 時它工作正常。 為什么僅使用控制台日志顯示未定義? 為什么它不顯示,為什么需要 function 來顯示。
這是代碼。
var toDoList = {
// Holding the List
myList: ['List1', 'List2', 'List3', 'List4', 'List5'],
// Displaying the List
displayMyList: console.log(this.myList)
}
當我嘗試使用點符號訪問 object 屬性 displayMyList 時,這會將其顯示為“未定義”。 但是,當使用一種方法時,它會很好地顯示列表。 我想知道為什么會這樣?
var toDoList = {
// Holding the List
myList: ['List1', 'List2', 'List3', 'List4', 'List5'],
// Displaying the List
displayMyList: function(){
console.log(this.myList)
}
}
首先,查看: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
var toDoList = {
// Holding the List
myList: ['List1', 'List2', 'List3', 'List4', 'List5'],
// Displaying the List
displayMyList: console.log(this.myList)
}
上面的第一個示例存在幾個問題。
displayMyList
的屬性設置為console.log(this.myList)
的返回值。 console.log() 不返回任何值(請參閱: https://developer.mozilla.org/en-US/docs/Web/API/Console/log )因此分配給displayMyList
的值將始終為undefined
。this
指的是全局this
除非它已被設置為另一個上下文。請參閱https://developer.mozilla.org/en-US/docs/Web /JavaScript/Reference/Global_Objects/globalThis 。所以您將查看 globalThis 的屬性myList
(或者在該上下文中this
綁定的內容)。var toDoList = {
// Holding the List
myList: ['List1', 'List2', 'List3', 'List4', 'List5'],
// Displaying the List
displayMyList: function() {
console.log(this.myList)
}
};
這解決了這些問題,您是:
toDoList
的上下文中運行它this
。 請注意此處使用function
關鍵字如何將this
重新綁定到包含 object。
function
關鍵字的情況下定義了 function,例如displayMyList: () => console.log(this.myList),
它也將不起作用,因為箭頭函數不會重新綁定this
。 請參閱: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functionsfunction
關鍵字。 如果您以不同的方式調用 function,它也不起作用。 以下示例:// Won't work
const x = toDoList.displayMyList;
x();
// Won't work
toDoList.displayMyList.call(globalThis);
// Won't work
toDoList.displayMyList.apply({});
您需要使用object 方法來記錄您的列表
var toDoList = { // Holding the List myList: ['List1', 'List2', 'List3', 'List4', 'List5'], // Displaying the List displayMyList() { console.log(this.myList) }, } toDoList.displayMyList()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.