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

回答編集履歴

2

調整

2019/12/05 01:51

投稿

yambejp
yambejp

スコア117973

answer CHANGED
@@ -11,7 +11,33 @@
11
11
  var y=new hoge(123);
12
12
  hoge.prototype.view=function(){console.log(this.x)};
13
13
  y.view(); //結果:123
14
+ var z=new hoge(456);
15
+ z.view(); //結果:456
14
16
  ```
15
17
  上記hogeに直接メソッドを追加できませんがprototypeを経由すればできます
16
18
  またインスタンスyを指定したあとにprototype経由でメソッドを追加しても
17
- インスタンスからメソッドが呼び出せます。
19
+ インスタンスからメソッドが呼び出せます。
20
+
21
+ # 追記
22
+ prototypeを通さないとメソッドが追加されない
23
+ ```javascript
24
+ function hoge(x){
25
+ this.x=x;
26
+ }
27
+ var y=new hoge(123);
28
+ hoge.view=function(){console.log(this.x)}; //エラー
29
+ ```
30
+
31
+ インスタンス自体は拡張可能
32
+ ```javascript
33
+ function hoge(x){
34
+ this.x=x;
35
+ }
36
+ var y=new hoge(123);
37
+ y.view=function(){console.log(this.x)};
38
+ y.view(); //結果:123
39
+ var z=new hoge(456);
40
+ z.view(); // エラー
41
+ ```
42
+ インスタンスを拡張しても元のコンストラクタへは影響がないので
43
+ 別のインスタンスから実行することはできない

1

ちょうせい

2019/12/05 01:51

投稿

yambejp
yambejp

スコア117973

answer CHANGED
@@ -1,3 +1,17 @@
1
1
  > Object.prototype. つまり, Objectのプロトタイプオブジェクトで定義されているのでしょうか?
2
2
 
3
- こればっかりはそういう仕様だからとしか言いようがないですね
3
+ こればっかりはそういう仕様だからとしか言いようがないですね
4
+
5
+ # sample
6
+
7
+ ```javascript
8
+ function hoge(x){
9
+ this.x=x;
10
+ }
11
+ var y=new hoge(123);
12
+ hoge.prototype.view=function(){console.log(this.x)};
13
+ y.view(); //結果:123
14
+ ```
15
+ 上記hogeに直接メソッドを追加できませんがprototypeを経由すればできます
16
+ またインスタンスyを指定したあとにprototype経由でメソッドを追加しても
17
+ インスタンスからメソッドが呼び出せます。