Javascript 使用显示console.log';未定义';

Javascript 使用显示console.log';未定义';,javascript,arrays,object,methods,Javascript,Arrays,Object,Methods,对Javascript来说相当陌生 我能解释一下为什么当使用点符号日志访问displayMyList时,它的object属性为“未定义”,但当放入函数时,它工作正常。为什么只在控制台日志中显示undefined?为什么它不显示,为什么它需要一个函数来显示 这是密码 var toDoList = { // Holding the List myList: ['List1', 'List2', 'List3', 'List4', 'List5'], // Displaying the List d

对Javascript来说相当陌生

我能解释一下为什么当使用点符号日志访问displayMyList时,它的object属性为“未定义”,但当放入函数时,它工作正常。为什么只在控制台日志中显示undefined?为什么它不显示,为什么它需要一个函数来显示

这是密码

var toDoList = {
// Holding the List 
myList: ['List1', 'List2', 'List3', 'List4', 'List5'],
// Displaying the List
displayMyList: console.log(this.myList)
}
当我尝试使用点符号访问对象属性displayMyList时,它将显示为“未定义”。但是,当使用方法时,它会显示列表。我想知道这是为什么

 var toDoList = {
    // Holding the List 
    myList: ['List1', 'List2', 'List3', 'List4', 'List5'],
    // Displaying the List
    displayMyList: function(){
  console.log(this.myList)
}
    }
您将需要使用日志记录您的列表

var toDoList={
//持有名单
我的列表:['List1','List2','List3','List4','List5'],
//显示列表
displayMyList(){console.log(this.myList)},
}
toDoList.displayMyList()
首先,签出:


上面的第一个例子有几个问题

  • 首先,您将toDoList中名为
    displayMyList
    的属性设置为
    console.log(this.myList)
    的返回值。console.log()不返回任何值(请参阅:),因此分配给
    displayMyList
    的值将始终是
    未定义的
  • 其次,它将对其求值,并查看其返回的内容(此时
    this
    指的是全局
    this
    ,除非它已被设置为另一个上下文。请参阅。因此,您将查看globalThis的属性
    myList
    (或者在该上下文中
    this
    绑定的内容)
这将修复这些问题,您是:

  • 将displayMyList指定为稍后将在
    toDoList
    作为
    this
    的上下文中运行的函数
注意这里使用
函数
关键字如何将
重新绑定到包含的对象

  • 如果定义的函数没有
    function
    关键字,例如
    displayMyList:()=>console.log(this.myList),
    它也不会工作,因为箭头函数不会重新绑定
    this
    。请参阅:
  • 同样,即使您使用了
    函数
    关键字。如果您以不同的方式调用该函数,它也不会起作用。下面的示例:
只需查看“this”的计算结果-
console.log(this)
。这将为您提供答案。
var toDoList = {
  // Holding the List 
  myList: ['List1', 'List2', 'List3', 'List4', 'List5'],
  // Displaying the List
  displayMyList: console.log(this.myList)
}
var toDoList = {
  // Holding the List 
  myList: ['List1', 'List2', 'List3', 'List4', 'List5'],
  // Displaying the List
  displayMyList: function() {
    console.log(this.myList)
  }
};
// Won't work
const x = toDoList.displayMyList;
x();

// Won't work
toDoList.displayMyList.call(globalThis);

// Won't work
toDoList.displayMyList.apply({});