お世話になっております。
javascript
1function A(a,b,c){ 2 this.a = a; 3 this.b = b; 4 this.c = c; 5} 6 7A.prototype.someAction = function(){ 8 return; 9} 10 11function B(){ 12 this.attr = new A(1,1,1); 13} 14
という関係があり,これを
javascript
1b = new B(); 2a = new A(2,3,4); 3b.instance_a = a
などとしてObjectを渡すのではなく,
javascript
1Object.defineProperties(B.prototype, 2 {instance_a:{set:function(value){this.instance_a.a = value.a}} 3}) 4b.instance_a = a;
としてプロパティに設定したクラスのそれぞれのpropertyに参照渡しではなく
コピー代入でアクセスできるようにしたいです。
上記のコードでは一つ一つのプロパティに同じように列挙すればできますが,
プロパティの数が多いので,
javascript
1 Object.defineProperties(B.prototype, 2 {instance_a:{set:function(value){ 3 for(var val of Object.getOwnPropertyNames( A.prototype )){ 4 this.attr[val] = value[val] 5 } 6 } 7 })
などとしたいのですが
,余計なsomeActionなどのインスタンスメソッドやconstructorなどが一緒に取得されてしまいます。これらを排除して,propertyを得るようなメソッドはありますか?
なければ全部列挙すれば済むのですが,もしそれより簡単にできる方法をご存知の方や思いつく方がいらっしゃれば教えていただければと思います。宜しくお願いします。
追記
for文で回したい理由があって実はpropertyのsetter経由で代入を行うと,viewの変更も同時に行うように設定したくて,
javascript
1properties = {}; 2for(var val of Object.getOwnPropertyNames( A.prototype )){ 3 properties[val] = {set:((val)=>{(value)=>{ 4 this.instance_a[val] = value; 5 updateView(value); 6 }})(val)}; 7} 8Object.defineProperties(B.prototype,properties) 9
としてvalueの条件分岐でViewをupdateするメソッドを作っています。
なのでObject.getOwnPropertyNames( A.prototype )から余計なpropertiesを弾く方法で実装したいという経緯があります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/10/05 06:31
2016/10/05 06:36
退会済みユーザー
2016/10/05 06:55
2016/10/05 07:12 編集
退会済みユーザー
2016/10/05 08:48
2016/10/05 09:01
退会済みユーザー
2016/10/05 09:35
2016/10/05 09:57