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

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

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

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

Q&A

1回答

306閲覧

javascriptでobejctはすべて関数で生成される

Kimsehwa

総合スコア312

JavaScript

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

1グッド

2クリップ

投稿2019/03/05 15:38

知人から「javascriptでobejctはすべて関数で生成される」
と聞きましたが、正しい認識で合ってますか?

objectを生成する例

var Member = function(id,pass,gender){ this.id = Id; this.pass = pass; this.gender = gender; } var member = new Member('xx','xx','male');
var member = new Object();
var member = {};

も暗黙的に new Object()を使うそうなので

確かに関数を利用して生成してるようには見えます。

var member = {
id: 'xx',
pass: 'xx',
gender: 'male'
}

これも
console.log(member);

を見ると

_proto__: constructor: ƒ Object()

となってるので関数を利用して作ってるように見えます。

他にobjectを生成する手段はよくわかってません。

もし認識違いがありましたらご教示いただけますでしょうか

bochan2👍を押しています

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

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

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

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

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

guest

回答1

0

暗黙的

暗黙的に new Object()を使うそうなので

挙動としては、{} と new Object は等価ですが、「暗黙的に new Object()を使う」のニュアンスには違和感があります。
{} を使うたびに毎回、関数を [[Call]] しているわけではありません。

new 演算子

関数に準えるのは、[[Prototype]] を new 演算子で設定することを意図していると想像しますが、new 演算子による呼び出しを禁止している関数もあります。

JavaScript

1var p = document.createElement('p'); 2 3console.log(Object.getPrototypeOf(p) === HTMLParagraphElement.prototype); // true 4new HTMLParagraphElement; // TypeError: Illegal constructor

Object.create()

[[Prototype]] は設定しない事も可能です。

JavaScript

1var o = Object.create(null); 2 3console.log(Object.getPrototypeOf(o)); // null

この場合、new 演算子で上記オブジェクトを生成することが出来ません。

コンストラクタが存在しない

今、コードを思いつきませんが、オブジェクトの中にはコンストラクタを変数参照できないものも存在します。
コンストラクタが存在しないので、new 演算子による生成も出来ません。
「Object.getPrototype() で [[Prototype]] を取得→Object.create() でオブジェクト生成」は出来るかもしれませんが、[[Prototype]] を設定しているだけなのでその他の初期化処理は全く働きません。
現実的には、正規のオブジェクト生成手段を使用する事になると思います。

Re: Kimsehwa さん

投稿2019/03/05 23:03

think49

総合スコア18156

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問