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

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

ただいまの
回答率

88.83%

なぜ公式サイトが具体的なオブジェクトを持っている?何のために?

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,097

goforward

score -411

イメージ説明

クラスからコンストラクタでインスタンスを作ってそれをsで受けた。

var s = new String("taguchi");
        console.log(s.length);


この文は
stringクラスからコンストラクタでsオブジェクト(インスタンス)を作り、
sオブジェクト.lengthプロパテにアクセスし、呼び出しと解釈してよろしいでしょうか?

公式サイトを見ているとStringがオブジェクトのように思えます。オブジェクトのコンストラクタではなく、クラスのコンストラクタでインスタンスを作ったのでないのでしょうか?
そもそもなぜ人間クラスではなく、具体的なAさんやBさんなどのようなオブジェクトを作る必要があるのでしょうか?

公式サイトののすべてはクラスではないのでしょうか?
クラスを継承してオブジェクトを作ったり、少し機能追加したり。コンストラクタで宜しくお願い致します。
クラスとインスタンス名が同じになるというルールなのでしょうか?


次は組み込みオブジェクトについて見ていきたいと思います。
0:07
前回は自分でオブジェクトを作りましたが、あらかじめ JavaScript が用意してくれているオブジェクトがいくつかあります。
0:13
それを使うと便利なメソッドやプロパティが使えるようになるので見ていきましょう。
0:17
いくつかありますが、よく使うものは、文字列に関する String オブジェクト、配列に関する Array オブジェクト、数学に関する Math オブジェクト、日付に関する Date オブジェクトなどがあるので、ざっと見ていきましょう。
0:31
まずは文字列オブジェクトについて見ていきたいと思います。
0:35
文字列オブジェクトを作るには、「new String("…");」としてあげて、何の文字列に対して作りたいかを引数で渡してあげます。
0:44
そうすると s に対して色んなメソッドやプロパティが使えるようになります。
0:48
どういったものが使えるのかは、MDN のサイトで調べると良いので、「mdn string」などで検索してみてください。
0:55
そうすると色々難しい用語が並んでいるのですが、見るべきは「String インスタンス」というところの下にある、プロパティやメソッドになります。
1:08
せっかくなので、ちょっと見てみたいと思います。
1:12
例えば s.length というプロパティを使うと、taguchi の文字数を返してくれます。
1:23
この場合だと 7 文字で…こうですね、7 が返ってきているのがわかるかと思います。

リンク内容

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2017/04/29 17:41

    「公式サイトが具体的なオブジェクトを持っている」とは?

    キャンセル

回答 2

+6

JavaScriptの世界では、コンストラクタは関数であって、そして関数もオブジェクトです。

String関数自体のオブジェクト」と「String()で作ったオブジェクト」は別物です。

そして、ある程度学習が進むまで、「クラス」という単語はJavaScriptでは忘れてください

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/01 01:13

    確かに本を見ている限りクラスという言葉は一度も出てきていません。

    キャンセル

  • 2017/05/01 06:44

    JavaScriptは「プロトタイプベース」といって、クラスをベースとして「いない」言語なのです。

    キャンセル

-1

maisumakunさんも示唆していますが、javascriptには「クラス」という概念は存在しません

javascriptにおける"コンストラクタ"とは、正確には関数のコンストラクタ呼び出しです。
javascriptには、関数の呼び出し方が複数種類存在し、コンストラクタとは関数の呼び出し方の一種なのです。

function Sample(args) {
  console.log('this:', this);
  console.log('args:', args);
}

var obj = {
  sample: Sample
};

Sample(123);         // 1. いわゆる「関数呼び出し」
new Sample(123); // 2. 関数の「コンストラクタ呼び出し」
obj.sample(123);  // 3. 関数の「メソッド呼び出し」

これらはそれぞれ、関数内で参照されるthisの中身が変わります。

  1. 関数内のthisはグローバルオブジェクト(=windowオブジェクト)を参照し、
    呼び出された関数はreturnの結果を返します。
  2. 関数内のthisは、Sampleという名前の空オブジェクト(={})を参照し、
    呼び出された関数はそのSampleオブジェクトを返します。
  3. 関数内のthisは、sampleメソッドのレシーバ(=obj)を参照します。
    呼び出された関数はreturnの結果を返します。
var s = new String("taguchi");

上記ケースの場合、「Stringクラスのコンストラクタでインスタンスを作成し、変数sに格納した」のではなく、「String関数のコンストラクタ呼び出しを行い、コンストラクタで組み立てられたStringオブジェクトを変数sに格納した」という説明になります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る