请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

装饰器模式--readonly装饰器异常信息未抛出

针对于readonly这个装饰器的代码,自己写的readonly确实生效了,可以看到虽然后面针对于p.name进行了赋值,但是还是返回的是原来的值。
奇怪的是并没有在控制台打印出报错信息。使用第三方core-decorators的话则和课程一样。是代码的问题还是说和浏览器有一定的关系。

class Person{
  //装饰方法
  @readonly 
  name() {return '111'}
  
}

function readonly(target, name, descriptor) {
  descriptor.writable = false;
  return descriptor
}

var p = new Person()

p.name = function () {
  return '222'
} 
alert(p.name());

正在回答

1回答

decorators 是 ES 语法,无法在浏览器直接运行的。需要经过 babel 的编译,生成 js 才能在浏览器运行。

所以,按理说,应该会在 babel 编译时报错,而不是浏览器运行时。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕哥0140068 #1
    是的,我的描述有问题,core-decorators报错的节点确实是编译报错。但是针对于问题里的这段代码,我的赋值函数{return '222'}并没有生效,并且删除@readonly后赋值生效,证明这个装饰器的代码是正确且有用的。
    但是我比较奇怪的一点是这个并没有任何的报错(针对于不可修改属性的报错,及课程所示的那种)。麻烦老师看一下这个报错为什么没有抛出呢?
    回复 有任何疑惑可以回复我~ 2021-08-11 10:47:16
  • 双越 回复 提问者 慕哥0140068 #2
    编译都报错了,那后面的肯定就不能生效了。ES 语法的问题只能是编译报错,执行不会报错的。
    回复 有任何疑惑可以回复我~ 2021-08-11 17:36:35
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信