JS“无法设置未定义的属性”该如何解决?
2019-10-18
969
我正在用 JS 构建一个“国际象棋游戏”,我必须做类似的事情。当我运行代码时一切正常,但在控制台上我收到消息“Uncaught TypeError:无法在 func 上设置未定义的属性‘value’”。我应该怎么做才能解决这个问题?因为它会延迟页面。
let obj = {
value: 50
}
function func (object) {
setTimeout(func);
object.value = 10;
}
func(obj);
一切正常,但控制台说出了问题。我该怎么办?
3个回答
您的计时器回调不会将任何内容传递给
func
函数。因此,当
func
作为计时器的结果运行时,没有参数,因此
object
是
undefined
。
您需要将其包装在一个可以将
object
传递给它的匿名函数中。
let obj = {
value: 50
}
function func (object) {
setTimeout(function() { func(object); });
object.value = 10;
}
func(obj);
Scott Marcus
2019-10-18
从技术上讲,您甚至不需要将
obj
传递给
func()
;因为
obj
是在函数外部定义的,所以范围决定它无需传递即可使用。
let obj = {
value: 50
}
function func () {
setTimeout(func);
obj.value = 10;
}
func();
注意:
func()
内的
setTimeout(func)
会导致无限循环(如答案/评论中指出的那样),但至于为什么您会收到错误,这是一种解决问题的方法。
Tim Lewis
2019-10-18
setTimeout
有 2 个参数:要调用的函数和以毫秒为单位的延迟。
let obj = {
value: 50
}
function func (object) {
setTimeout(function() {
func(object);
}, 0); // how long should it wait?
object.value = 10;
}
func(obj);
Ibu
2019-10-18