2.0クラスで黙示的なset/getメソッドを定義して、代入式によりプロパティを設定したとき、代入式の返す値がgetメソッドの戻り値になります。setメソッドで設定したプロパティの値と異なる値を、getメソッドから独自に返す処理を行っている場合に、この動作が問題になります。270本来の代入式は、代入された右辺の値を返します。したがって、複数のプロパティ/変数に連結した代入を行うと、すべてのプロパティ/変数には、最右辺の値が代入されます。2.0の黙示的なsetメソッドは、代入式の記述により呼出されます。したがって、実際には代入式でなく、メソッドの呼出しが行われている訳です。2.0の黙示的なset/getメソッドを定義すると、setメソッドはgetメソッドの戻り値を返す実装になっているようです。そのため、代入式の形式で呼出したsetメソッドの値として、getメソッドが呼出され、その戻り値が返されます。1.0のObject.addProperty()メソッドの処理に相当します。Object.addProperty()メソッドで定義したプロパティに(set関数をとおして)値を設定しても、get関数は呼出されません。対処法get関数へのアクセスは、おそらく意図的に追加されたものでしょう。その意味では、実装と考えるべきかもしれません。代入式の記述からは、代入された右辺値が返されると予測することが通常です。Setters)のsetterは値を返すべきでなく、「代入式の結果はsetterに渡された引数になる」[*1]とされています。setter."と述べています。42)が値42を返し、代入後のserialNumberの値として43が返されるとしています。{x=n}もっとも、クラスから生成するオブジェクトインスタンスに型指定をしないと、Object.addProperty()メソッドと同じく、代入式の右辺値が返されます(内部的に、getメソッドの呼出し自体は行われているようです)。2.0の黙示的なsetメソッドは、代入式のかたちで渡した代入(右辺)値を返さないという点で、通常の代入式やECMAScriptの仕様と齟齬(そご)をきたします。1.0のObject.addProperty()メソッドと異なり、型指定の有無によって結果が変わる点で、整合性に問題があるといわざるをえません。したがって、混乱を避けるためには、黙示的ではなく明示的なset/getメソッドを使う方がよいのかもしれません(この場合、setメソッドの戻り値は任意に設定できます)。