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

回答編集履歴

1

コンストラクタパターンのコード追記

2017/08/30 07:59

投稿

think49
think49

スコア18194

answer CHANGED
@@ -5,6 +5,46 @@
5
5
  ```
6
6
 
7
7
  あるいは、型付言語的な仕組みが欲しいという事なのでしょうか。
8
+
9
+ ```JavaScript
10
+ 'use strict';
11
+ function User (name, id, position) {
12
+ this.name = String(name);
13
+ this.id = Number(position);
14
+ this.position = Number(position);
15
+ }
16
+
17
+ function Box ( /*arrayLike*/ ) {
18
+ if (arguments.length) {
19
+ var arrayLike = Object(arguments[0]);
20
+
21
+ for (var i = 0, len = arrayLike.length, user; i < len; ++i) {
22
+ if (Object.prototype.hasOwnProperty.call(arrayLike, i)) {
23
+ user = arrayLike[i];
24
+ this.add(user.name, user.id, user.position);
25
+ }
26
+ }
27
+ }
28
+ }
29
+
30
+ Object.defineProperty(Box.prototype, 'add', {
31
+ writable: true,
32
+ enumerable: false,
33
+ configurable: true,
34
+ value: function add (name, id, position) {
35
+ return Array.prototype.push.call(this, new User(name, id, position));
36
+ }
37
+ })
38
+
39
+ var box1 = new Box();
40
+ box1.add('taro', 1, 0);
41
+ box1.add('koichi', 2, 100);
42
+ console.log(box1);
43
+
44
+ var box2 = new Box([{name: 'taro', id: 1, position: 0}, {name: 'koichi', id: 2, position: 100}]);
45
+ console.log(box2);
46
+ ```
47
+
8
48
  「seriさんがどういう設計を望んでいるのか」を日本語で書き表してみて下さい。
9
49
  また、seriさんの分かる範疇でJavaScriptコードを書き、「コード上で足りない部分」を説明してみて下さい。
10
50