teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2015/09/20 10:45

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37481

answer CHANGED
@@ -14,4 +14,30 @@
14
14
  [http://www.ecma-international.org/ecma-262/5.1/#sec-15.7.4.4](http://www.ecma-international.org/ecma-262/5.1/#sec-15.7.4.4)
15
15
 
16
16
  こちらのブログが参考になるかもしれません。
17
- [valueOfとtoStringとToPrimitive - os0x.blog ](http://os0x.hatenablog.com/entry/20100916/1284650917)
17
+ [valueOfとtoStringとToPrimitive - os0x.blog ](http://os0x.hatenablog.com/entry/20100916/1284650917)
18
+
19
+
20
+
21
+
22
+
23
+ コメントを受けて追記します。
24
+
25
+ > 具体的にはhp={start: 10, glow: 3}というオブジェクトで、ステータスの初期値と成長値をhp.start、hp.glowで取得するようにします。そして、hpとしただけだと、他の変数で管理しているレベルとstartとglowで計算した現在のステータスを表示させるようにしたいです。
26
+
27
+ > threeの用にプリミティブ値を自分で作れればできるのではないかなと思いました。Number.prototypeに追加すると他の部分数値を扱うところにも影響が出てしまうので、何か別の方法が見つかれば幸いです。
28
+
29
+ それは無理かと思います。
30
+ たとえば、
31
+ ```javascript
32
+ (1).toString(); // "1"
33
+ ```
34
+ このような結果のため、1 というプリミティブに toString メソッドが存在するかのように見えますが、仕様を見ますと分かりますとおり、プリミティブに対する[[Get]]内部メソッドの処理の1番目に、
35
+ > Let O be ToObject(base)
36
+ [http://www.ecma-international.org/ecma-262/5.1/#sec-8.7.1](http://www.ecma-international.org/ecma-262/5.1/#sec-8.7.1)
37
+ とありますから、実際にはNumberオブジェクトに型キャストされているのだと思います。
38
+
39
+ つまり、プリミティブな 3 を取り扱いたいならそれはNumberオブジェクトではありませんからプロパティやメソッドを持てず、逆にプロパティやメソッドを持っているならそれはプリミティブではない、と考えていいのだと思うのです。
40
+
41
+
42
+ こちらのブログが参考になるかもしれません。
43
+ [プリミティブはオブジェクトじゃないし、プリミティブと参照なんて区別はない - uokumura’s diary](http://uokumura.hatenablog.com/entry/20090614/1245016857)