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

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

新規登録して質問してみよう
ただいま回答率
85.35%
コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

JavaScript

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

Q&A

解決済

5回答

447閲覧

javascript constructor

old_dog

総合スコア51

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

JavaScript

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

0グッド

0クリップ

投稿2021/08/17 04:07

やりたい事 「空のオブジェクトをnewできるようにしたい」

var sam1={}; var sam2=new sam1();

としてsam2インスタンスを生成したいのですが、sam1は単なる空の連想配列なので、functionではなく、constructorがないのでnewできません。

var sam1={};

にconstructorを定義するなどして、newできるようにするには、どうしたらいいのでしょうか?

よろしくお願いします。

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

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

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

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

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

guest

回答5

0

クラス - MDN

↑ ここを読まれるとよいのでは?

投稿2021/08/17 04:10

tkturbo

総合スコア5572

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

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

old_dog

2021/08/17 07:50

ご回答をありがとうございました。JSのクラスはJavaなどと異なり、疑似クラスという扱いでclassの記述を可能としたものと理解しています。なので基本的には疑似classではなく、new Object(null)や{}で作る空のオブジェクトから関数を作り、理解を深めたいと考えています。
guest

0

ベストアンサー

「あるオブジェクトをプロトタイプにして別なオブジェクトを作りたい」のであれば、Object.createというメソッドがあります(MDN)。

javascript

1var sam1={}; 2var sam2=Object.create(sam1);

投稿2021/08/17 08:07

maisumakun

総合スコア146018

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

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

old_dog

2021/08/17 08:23

ご回答をありがとうございました。ご指導いただきましたサンプルコードを、var sam1={i:i};最終に、console.log(Object.getProtptypeOf(sam2));を実行し,{i:i}が表示されました。この方法で内部prototypeにsam1を設定したsam2を生成できることは理解できたのですが、このsam2を関数型のオブジェクトに作り替える方法はないものか、ということを考えていたのですが、そのような考え方が悪いか、そういう必要がないということとのような気がしてきました。お忙しいところ心からお礼申し上げます。
maisumakun

2021/08/17 08:28 編集

> このsam2を関数型のオブジェクトに作り替える方法はないものか その方法を取ることで、「最初からコンストラクタ関数を作る」という方法では得られない何かがあるのでしょうか?
old_dog

2021/08/17 08:33

そのようなことはありません。JSを学習していくと、いろいろなオブジェクトの生成方法や、記述方法があり、とても柔軟な言語なので、いろいろ混乱してしまっており、オブジェクトリテラルを関数化できるのではないか、という単純な疑問を持ってしまいました。{}とf(){}は両方とも内部prototypeがあり、プロパティでprototypeを設置することができるのだから、{}にもprototype.constructorを設定したりして、関数にできるのではないか、っと。とても大切なお時間を私の愚問で消費させてしまいまして申し訳ありませんでした。また心からお礼申し上げます。ありがとうございました。
guest

0

(都合により削除)

イメージ説明

投稿2021/08/17 04:28

編集2021/10/08 21:54
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

old_dog

2021/08/17 07:01

質問内容が悪かったようで申し訳ありません。変数に関数を代入したり、function sam1(){}とすればconstructorやprototypeが設定されることは理解してるのですが、記載のように、sam1={}やsam1=new Object(null)で生成したオブジェクトをnewしてインスタンス化できるような記法を模索しています。
退会済みユーザー

退会済みユーザー

2021/10/08 21:54 編集

(都合により削除)
old_dog

2021/08/17 09:41

ご回答くださいましてありがとうございました。労いのお言葉もいただき心よりお礼申し上げます。今後ともご指導いただけますようお願いします。ありがとうございました。
guest

0

プロトタイプを使うというのはいかがですか?

マイクロソフト公式解説書「プログラミング Microsoft ASP.NET MVC」の 10.1.2 章に書いてあったことですが、JavaScript でオブジェクト指向を実装するのにプロトタイプを利用できるそうです。

その一例ですが、以下の記事のコードを見てください。

for...in ループと hasOwnProperty
http://surferonwww.info/BlogEngine/post/2017/06/30/use-of-hasOwnProperty-in-for-in-loop.aspx

投稿2021/08/17 04:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

old_dog

2021/08/17 07:43

ご回答ありがとうございました。掲示頂きました内容はすべて検証させていただきました。ご提示の内容ですと、オブジェクトのプロパティの継承の検証で、hasOwnPropertyはオブジェクトプロパティのprototypeのようには使えない、という内容のようでした。({})がnewできるようにするために、手作業で({})をFunctionにしたいのですが、なかなか見当たりません。
退会済みユーザー

退会済みユーザー

2021/08/17 07:52 編集

紹介した記事の表題や内容が良くなかったようですが、お伝えしたかったことはその中の一部で、 // Person クラスの疑似コンストラクター var Person = function (name, lastname, birthdate) { this.initialize(name, lastname, birthdate); } ・・・以下略・・・ というように定義しておけば、 var p = new Person("web", "surfer", "2017/6/30"); というように new できるということです。
old_dog

2021/08/17 07:55

引き続きありがとうございました。Personはfunction型で宣言されていますので、Person自体にconstructorがありnewしてインスタンスを生成できる、というのは理解しています。function型ではない、単純なJSオブジェクトとして、var Person={};と宣言して、Personオブジェクトをコードで関数化してnew Personでインスタンスを生成できる記法をさがしています。setPrototypeOf(obj)のようにオブジェクトにconstructorを設定できる方法とか。 お忙しいところ何度もありがとうございます。心からお礼申し上げます。
maisumakun

2021/08/17 08:11 編集

> 単純なJSオブジェクトとして、var Person={};と宣言して、Personオブジェクトをコードで関数化してnew Personでインスタンスを生成できる記法をさがしています。 JavaScriptの文法内では、「オブジェクトリテラルから作ったオブジェクト」を関数として呼び出せるように変化させる方法はありません(関数を作って上書きする、あるいはProxyという「オブジェクトに対する操作をすべてコードで再定義可能な特殊なオブジェクト」を使う、ぐらいしかありません)。
old_dog

2021/08/17 08:26

なるほどです。Proxyで直接作り変えるほかないのですね。とてもすっきりしました。お忙しいところ、愚問に真摯にご指導下さいましてありがとうございました。本当にすっきりしました。心よりお礼申し上げます!
guest

0

せめてこんな感じ

javascript

1var sam1=function(){}; 2var sam2=new sam1();

もしくは

javascript

1class sam1{};

投稿2021/08/17 04:24

編集2021/08/17 04:30
yambejp

総合スコア116724

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

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

old_dog

2021/08/17 07:46

ご回答いただきましてありがとうございました。({})や、sam=new Object(null)、もしくはsam={}と、オブジェクトを生成して、そのオブジェクトをFunction(型?)に手作業で作り変える記法を探しています。({})をJSのコードで関数に作り替えることはできないのでしょうか?
yambejp

2021/08/17 07:55

>オブジェクトを生成して、そのオブジェクトをFunction(型?)に手作業で作り変える ちょっと何をしたいかわかりません objectで宣言して、functionで上書きするということですか? であれば最初からfunctionで作ればよいような気がしますが?
old_dog

2021/08/17 08:03

度々ありがとうございます。おっしゃる通り、function sam(){}と宣言すれば済むことなのですが、{}からf(){}にできるのであれば、どんなコードを使っていくのだろうか、と疑問を持ってしまい、数日いろいろ調べているのですが、該当する情報がなく、こちらで質問させていただきました。変な質問をしてしまってすみませんでした。ご回答をありがとうございます。心からお礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問