Javascript 使用显示console.log';未定义';
对Javascript来说相当陌生 我能解释一下为什么当使用点符号日志访问displayMyList时,它的object属性为“未定义”,但当放入函数时,它工作正常。为什么只在控制台日志中显示undefined?为什么它不显示,为什么它需要一个函数来显示 这是密码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
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()不返回任何值(请参阅:),因此分配给console.log(this.myList)
的值将始终是displayMyList
未定义的
- 其次,它将对其求值,并查看其返回的内容(此时
指的是全局this
,除非它已被设置为另一个上下文。请参阅。因此,您将查看globalThis的属性this
(或者在该上下文中myList
绑定的内容)this
- 将displayMyList指定为稍后将在
作为toDoList
的上下文中运行的函数this
函数
关键字如何将此
重新绑定到包含的对象
- 如果定义的函数没有
关键字,例如function
它也不会工作,因为箭头函数不会重新绑定displayMyList:()=>console.log(this.myList),
。请参阅: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({});