【问题标题】:Why not allow mutation of the this binding?为什么不允许 this 绑定的突变?
【发布时间】:2011-03-01 22:47:41
【问题描述】:

我正在为一个学校项目构建一个解释器/编译器(现在它变成了一个爱好项目),一位讲师警告我不要让“this”绑定发生突变(他说这很恶心,并且做了一个巨大的处理它)但我从来不知道为什么这会如此......危险或糟糕。我很好奇为什么会这么糟糕。我认为这种功能可能会以某种方式有用。

我想知道是否有任何熟悉构建语言的人可以告诉我,“this”绑定上的突变可能会导致什么样的问题,以及他们是否知道如果真的允许的话可以做的任何很酷或有用的技巧。

您知道的任何语言都允许“this”的变异吗?

谢谢,

【问题讨论】:

  • 讨论也很棒。 :)

标签: programming-languages object mutation


【解决方案1】:

我很惊讶你的导师会这么激动。这只是语言定义的变化。我不认为能够改变this 的含义是有用 语言设计,但我认为只要你坚持引用语义它是有效的实验。

不允许this 引用当前方法的接收者以外的任何内容的主要原因是您会混淆任何曾经阅读或编写过面向对象程序的人的期望。 这不是好的设计。

【讨论】:

    【解决方案2】:

    我能想到几个原因,说明这不是一个好主意。

    1) 'this' 是指向调用方法调用的对象实例的指针。在最坏的情况下,允许对其进行更改可能会导致内存访问验证。

    2) 调用者期望方法在调用它的实例上工作。将“this”更改为其他内容会产生意想不到的结果。

    3) 我想不出任何“this”的突变会允许以更标准、更熟悉的方式实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多