在JavaScript中,懒惰的getter可以提高性能 可以在此处找到一些解释:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get#Smart_self-overwriting_lazy_getters
如何让懒惰的玩家在严格的模式下工作? 此JavaScript代码不起作用:
'use strict'
function Obj(x) {
this.x = x
}
Obj.prototype = {
get y() {
delete this.y
return this.y = this.x + 1
}
}
let obj = new Obj(100)
console.log('100 + 1 = ', obj.y)
它会出现以下错误: TypeError:设置仅限getter的属性" y"
如果我删除'使用strict',则代码正常 如何让它在严格模式下工作?
答案 0 :(得分:2)
delete
关键字不符合您的想法 - it only deletes own properties。但是Obj.prototype.y
和obj.j
之间存在重要差异。
在delete this.y
上使用的getter中使用obj
不会删除任何内容,因为obj
没有y
属性。
然后,您尝试在getter中分配给obj.y
。这不起作用 - 已经存在继承的y
访问器属性,因此它将调用该setter而不是创建新属性。您可以在使用getter后检查obj
进行检查 - 它现在实际上没有y: 101
属性,使用obj.y
将再次运行getter。
strict和sloppy模式之间的区别只是缺少的setter会导致异常或者只是被忽略。
要解决此问题,请删除delete
语句 - 它不起作用,并且您不想删除Obj.prototype.y
getter,它应该继续在其他{{1}上工作实例。相反,您需要使用Obj
的{{1}}属性来隐藏它。您可以使用y
。