質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

815閲覧

オブジェクトのプロパティを書き換える関数のきれいな書き方

FooVooBoo

総合スコア1

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/11/16 10:04

次のようなオブジェクトを返す関数があります。

javascript

1const sampleA = () => { 2 return { 3 a: 1, 4 b: 2, 5 c: 3 6 } 7}

プロパティを変える場合は以下のようにシンプルに書けます。

javascript

1const abc = sampleA(); 2abc.b = 4;

しかしこのやり方ではオブジェクトの内容が複雑化するにつれて難読化しそうです。
ゲッターセッターをsampleA関数に作りたいのですが、どのように作ればよいでしょうか?
以下のような動作ができるといいなとイメージしています。

javascript

1abc.updateB(4);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/11/16 10:21

結局は「そのオブジェクトの役割、どのように使われるか」で変化するのでは? セッターゲッターを作りたいなら「どうぞ」としか言えませんが。。
FooVooBoo

2021/11/16 10:28

質問の仕方が悪かったのかもしれません abcオブジェクトにゲッターセッターのような関数を乗せる方法はご存じでないですか? どうソースを書けばいいか思いつかなくて
Lhankor_Mhy

2021/11/16 10:29

クラスで書くのがいいように思うのですが、それではダメでしたか?
FooVooBoo

2021/11/16 10:42

今回は関数で書くとどうなるかを知りたかったです
Lhankor_Mhy

2021/11/16 10:43

文法にたいする質問だったのですね。把握しました。
FooVooBoo

2021/11/16 10:47

Lhankor 関心を持ってくれてありがとうございます
guest

回答2

0

オブジェクトにメソッドを生やすのは、プロパティの値に関数を持たせるだけです。

js

1const sampleA = () => { 2 return { 3 a: 1, 4 b: 2, 5 c: 3, 6 updateB: function(x){this.b = x} 7// ↓これは省略記法 8// updateB(x){this.b = x} 9 } 10}

ただ、クラスを使った場合はメソッドの実体はプロトタイプが持ちますが、このコードの場合はオブジェクトそれぞれが持つので無駄が多いと思います。

投稿2021/11/16 10:48

Lhankor_Mhy

総合スコア36960

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FooVooBoo

2021/11/16 11:06

Thankyou!! 回答してくれてありがとうございます!
FooVooBoo

2021/11/16 11:07

しかも簡潔な書き方
guest

0

ベストアンサー

セッタを勘違いしていませんか?

javascript

1const sampleA = () => { 2 const obj={ 3 a: 1, 4 b: 2, 5 c: 3 6 } 7 obj.updateB=function(v){this.b=v}; 8 Object.defineProperty(obj,"setterB",{ 9 set(v) { this.b = v; }, 10 enumerable: false, 11 }); 12 return obj; 13} 14const abc = sampleA(); 15abc.setterB=4; //セッターで処理するならこう 16console.log(abc); 17abc.updateB(8); //メソッドで処理するならこう 18console.log(abc);

投稿2021/11/16 10:38

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FooVooBoo

2021/11/16 10:41

Thankyou!! 勘違いしていました そしてありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問