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

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

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

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

Q&A

解決済

2回答

306閲覧

new Date について,class が作られていないが new は使えるのか

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2020/03/01 07:40

編集2020/03/01 08:08

ストップウォッチを作っています。JavaScript の
function countUp() {
const d = new Date(Date.now() - startTime);
における new Date ですが new は class からインスタンスを作る際に使うキーワードではないのでしょうか?

その為,3つめのコードのように class を作って new を使う事によってコメント部分のインスタンスができると思っているのですが,この考え方は誤りでしょうか?

JavaScript

1'use strict'; 2 3{ 4 const timer = document.getElementById('timer'); 5 const start = document.getElementById('start'); 6 const stop = document.getElementById('stop'); 7 const reset = document.getElementById('reset'); 8 9 let startTime; 10 11 function countUp() { 12 const d = new Date(Date.now() - startTime); 13 const m = String(d.getMinutes()).padStart(2, '0'); 14 const s = String(d.getSeconds()).padStart(2, '0'); 15 const ms = String(d.getMilliseconds()).padStart(3, '0'); 16 timer.textContent = `${m}:${s}.${ms}`; 17 18 setTimeout(() => { 19 countUp(); 20 }, 10); 21 } 22 23 start.addEventListener('click', () => { 24 startTime = Date.now(); 25 countUp(); 26 }); 27}

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 <title>Stopwatch</title> 6</head> 7<body> 8 <div id="timer">00:00.000</div> 9 <button id="start">Start</button> 10 <button id="stop">Stop</button> 11 <button id="reset">Reset</button> 12 13 <script src="js/main.js"></script> 14</body> 15</html>

JavaScript

1class Post{ 2 constructor(text){ 3 this.text = text; 4 this.likeCount = 0; 5 } 6 show(){...}, 7} 8 9 10new Post ("Hello"); 11 12// { 13// text = "Hello", 14// likeCount = 0, 15 16// show(){...}, 17// } 18

【オブジェクトについて】
下記コードの
point がオブジェクト名

{
x: 100,
y: 180,
}
部分がオブジェクトだと認識しているのですが,Date自体がオブジェクトというのはどのような意味でしょうか?
https://developer.mozilla.org/ja/docs/Learn/JavaScript/Objects/Basics

JavaScript

1'use strict'; 2 3{ 4 const point = { 5 x: 100, 6 y: 180, 7 }; 8 console.log(point); 9}

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

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

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

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

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

guest

回答2

0

Dateはそもそもオブジェクトです。

Date

日付や時刻を扱うことが可能な、JavaScript の Date インスタンスを生成します。Date オブジェクトは、1970 年 1 月 1 日 (UTC) から始まるミリ秒単位の時刻値を基準としています。

投稿2020/03/01 07:42

m.ts10806

総合スコア80850

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

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

退会済みユーザー

退会済みユーザー

2020/03/01 08:08

オブジェクトについて自分の考えを編集で付け加えています。 目を通して頂けますと幸いです。
m.ts10806

2020/03/01 08:47

「オブジェクト」とは、というところから考え方改めてください。 たぶん今の認識だとまずいと思います。基本的にJavaScriptはすべて「オブジェクト」ですよ。 いずれにしても私の提示したリンク先も読みましょう。 注釈にも書いてあります。 >注: JavaScript の Date オブジェクトは、JavaScript の Date をコンストラクタとして呼び出すことによってのみインスタンス化できます: 通常の関数として呼び出す (すなわち new 演算子を伴わない) と、Date オブジェクトではなく文字列が返ります。JavaScript の他のオブジェクト型とは異なり、JavaScript の Date オブジェクトにリテラル構文はありません。
退会済みユーザー

退会済みユーザー

2020/03/01 09:50

ありがとうございます。基本的にJavaScriptはすべて「オブジェクト」ということわかりました! Date は new を使いコンストラクタとして呼び出す事によってインスタンス化できるのですね! Date に new を付けない時と関数となる事も分かりました! ありがとうございます。
m.ts10806

2020/03/01 10:00

リファレンス読んでください。 いわば仕様書です。
退会済みユーザー

退会済みユーザー

2020/03/01 10:30

わかりました!読むように致します!
guest

0

ベストアンサー

実は JavaScript には元々 class は存在せず,
「プロトタイプベース」と呼ばれる手法でオブジェクト指向プログラミングが行われてきました.
それに対し, クラスを定義し, そこからインスタンスを生成する手法は「クラスベース」と呼ばれます.

そして, 現在の JavaScript に実装されている class は後付けの「糖衣構文」です.
要するに, プロトタイプベースのオブジェクト指向を, クラスベースに似せた構文でも近いものが書けるようにしたのです.
なので, 中身は従来の JavaScript とあまり変わっていません. 「クラスのようなもの」はあっても, クラスそのものは存在しないのです.

さて, 従来の JavaScript におけるオブジェクト指向なのですが...
なんと, Date 自体は単なる関数です. Date に限らず, ほとんどの「クラスに見えるもの」は JavaScript においては単なる関数です.
強いて言えばこれらの関数は new を添えて呼ぶのを前提として実装されていることでしょう.
new を付ける場合と new を付けない場合で関数の挙動が変わるのです (特に this の意味が変化するのは要チェック).
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new

そんなわけで「クラスを作って new することでオブジェクトが生成される」は確かに一般的にはそうなのですが, 厳密には間違っています.

投稿2020/03/01 09:21

kagilinn

総合スコア354

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

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

退会済みユーザー

退会済みユーザー

2020/03/01 10:31

ご丁寧にありがとうございます! とても分かり易く参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問