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

回答編集履歴

1

`person1\.length` から `person1\.name\.length` へ修正。`prototype` を使ったサンプルコード追記。

2016/03/20 00:10

投稿

think49
think49

スコア18194

answer CHANGED
@@ -1,5 +1,50 @@
1
1
  `"[MyData 田中花子]が大きい。"` が出力される結果に間違いはないと思います。
2
- https://jsfiddle.net/4b7xw4zd/
3
- 同じと評価したいなら `person1.length` か `person1.equals()` を使うコードでしょうか。
2
+ 同じと評価したいなら `person1.name.length, person1.equals(), persion1.toString(), person1.valueOf()` を使うコードでしょうか。
3
+ 本題ではありませんが、`prototype` を使ったコードにするとメモリを節約できると思います。
4
4
 
5
+ - [String 値の比較 - JSFiddle](https://jsfiddle.net/4b7xw4zd/2/)
6
+
7
+ ```javascript
8
+ 'use strict';
9
+ function MyData(name,mail,tel){
10
+ this.name = name;
11
+ this.mail = mail;
12
+ this.tel = tel;
13
+ }
14
+
15
+ MyData.prototype = {
16
+ toString: function toString () {
17
+ return "[MyData " + this.name + "]";
18
+ },
19
+ equals: function equals (that) {
20
+ return this.valueOf().length == that.valueOf().length;
21
+ },
22
+ valueOf: function valueOf () {
23
+ return this.toString();
24
+ },
25
+ compareTo: function compareTo (that) {
26
+ return this.valueOf().length - that.valueOf().length;
27
+ }
28
+ };
29
+
30
+ var person1 = new MyData("山田太郎","taro@yamada.hoge","090-9999-9999");
31
+ var person2 = new MyData("田中花子","hanako@tanaka.hoge","080-8888-8888");
32
+
33
+ console.log(person1.name.length === person2.name.length); // true
34
+ console.log(person1.valueOf().length === person2.valueOf().length); // true
35
+ console.log(person1.toString().length === person2.toString().length); // true
36
+ console.log(person1.equals(person2)); // true
37
+
38
+ if (person1 > person2){
39
+ document.write(person1 + " が大きい。");
40
+ } else if (person1 < person2){
41
+ document.write(person2 + " が大きい。。");
42
+ } else {
43
+ document.write(person1 + "と" + person2 + " は、同じ。");
44
+ }
45
+ ```
46
+
47
+ (**更新履歴**)
48
+ - 2016/03/20 09:08 `person1.length` から `person1.name.length` へ修正。`prototype` を使ったサンプルコード追記。
49
+
5
50
  Re: tada_tadaa さん