内容とタイトルが合致しているか、あまり自信がありません……
現在、コードは下記のようになっています。
JavaScript
1$(function(){ 2 3 methodB(); 4 methodC(); 5 6 // numを外部から見えないように保持したい 7 function methodA() { 8 var _num; 9 this.setNumber = function(num) { _num = num; } 10 this.getNumber = function() { return _num; } 11 } 12 13 // numを設定する 14 function methodB() { 15 var a = new methodA(); // ----- ① 16 a.setNumber(100); 17 } 18 19 // methodBの処理を行った後、変更されたnumの値を取得したい 20 function methodC() { 21 var a = new methodA(); // ----- ② 22 console.log(a.getNumber()); // 出力:undefined 23 } 24});
このとき、methodCの出力はundefined
となりますが、コメントにも記述されている通り、
ここではmethodBでセットした100
の値を取得したいのです。
それを実現するためには、①、②の宣言(インスタンス化?)をメソッドの外に出せば可能ではあるのですが……
「いや、それならいっそのことnum
の変数外に出しちゃったほうが早いじゃん!」てなってます(´・ω・`)
かなり漠然とした質問ではありますが、どのように書けばオブジェクト指向っぽくmethodCで値を取得できますか?
ご教示のほど、よろしくお願いいたします。
追記:
迅速な回答ありがとうございます。
回答欄でもご指摘をいただきましたが、質問内容が漠然としすぎでしたので、追記します。
自身で上手く言語化できませんでしたが、言葉をお借りするなら、
「複数の関数 ( メソッド? ) で一つのオブジェクトを使いたい」という目的に近いです。
ただ、必要なメソッドを必要な分だけ、そのメソッド内でオブジェクト化したいのです。
現状のコードは、下記のようになっています。
JavaScript
1$(function(){ 2 3 var a = new methodA1(); 4 var b = new methodA2(); 5 var c = new methodA3(); 6 7 methodB(); 8 methodC(); 9 methodD(); 10 11 // numの変数を保持したり取得したりするメソッド 12 function methodA1() { 13 var _num; 14 this.setNumber = function(num) { _num = num; } 15 this.getNumber = function() { return _num; } 16 } 17 18 // fooの変数を保持したり取得したりするメソッド 19 function methodA2() { 20 var _foo; 21 this.setFoo = function(foo) { _foo= foo; } 22 this.getFoo = function() { return _foo; } 23 } 24 25 // barの変数を保持したり取得したりするメソッド 26 function methodA3() { 27 var _bar; 28 this.setBar = function(bar) { _bar = bar; } 29 this.getBar = function() { return _bar; } 30 } 31 32 // いろんな値を設定する[ここではメソッドA1、メソッドA2だけ使いたい] 33 function methodB() { 34 a.setNumber(100); 35 b.setFoo("Foo"); 36 } 37 38 // いろんな値を設定する[ここではメソッドA2、メソッドA3だけ使いたい] 39 function methodC() { 40 b.setFoo("Foo"); 41 c.setBar("Bar"); 42 } 43 44 // methodA1~A3の処理を行った後、変更されたnumの値を取得したい 45 function methodD() { 46 console.log(a.getNumber()); // 出力:100 47 console.log(b.getFoo()); // 出力:Foo 48 console.log(c.getBar()); // 出力:Bar 49 } 50});
しかし、このコードだと、methodBはメソッドA1、メソッドA2しか使わないにも関わらず、
メソッドA3も使おうと思えば使えてしまいます。
同様に、methodCもメソッドA1が使えてしまいます。
今回は、メソッドが3つの場合を挙げましたが、これが5個、10個……になってくると、
どこで何を使っているのかがかなり分かりにくくなってしまうので、
このコードの書き方は問題ありそうだなあ……と思えてきたため、質問いたしました。
それぞれのメソッドで、必要な分だけオブジェクト化して使用したいと考えています。
しかし、構造的に、どのように記述すればいいのかが分かりません(´・ω・`)
今度は、そこそこ質問の意図が明確になったような気がします……が、曖昧な箇所等あれば随時追記します。
ご教示のほど、よろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/02 08:02 編集
2018/01/02 08:06
退会済みユーザー
2018/01/02 08:24