・Dateオブジェクトを見ているのですが、setTimeメソッドが理解できません
・getTimeメソッドだと、「返り値」を受け取れるのに、
setTimeメソッドでは、なぜ「返り値」を受け取れないのでしょうか?
・メソッド名に「set」「get」が付いているので、てっきりセッターゲッターみたいな物だと思ったのですが…
・直接プロパティ値を書き換えるのでしょうか? 参照みたいに
・マニュアルを見たら、「インスタンスを生成した関数を返します。これはデフォルトでは Date コンストラクタです」と書かれているのですが、これはどういう意味なのでしょうか?
・コンストラクタなのに、プロパティ? インスタンスを生成した関数?
>このプロパティの値は関数そのものの参照であり、関数の名前を含んだ文字列ではないことに注意してください
・関数そのものの参照って何ですか?
・Dateオブジェクトの実体はどこに存在しているのでしょうか?
▽Date - JavaScript | MDN
https://developer.mozilla.org/ja/docs/JavaScript …
No.5ベストアンサー
- 回答日時:
No.4です。
連続すみません、補足です。
JavaScriptのOOPはprototypeベースなので、
function Date(){}
Date.prototype = {
getDate: function(){},
setDate: function(t){}
};
と定義している場合、
var today=new Date();
でインスタンスを生成した場合は、
『function Date(){}』この部分だけのインスタンスが生成されます。
この場合のクラスはコンストラクタだけであり、
コンストラクタ以外のメソッド等は含まれていません(が、呼び出しできる)。
------------
あとセッターゲッターですが、
書き方が全く違うので、何か別の物と勘違いされていると思います。
/* ゲッターを定義 */
Date.prototype.__defineGetter__("currentDate", function() { return this.getDate(); });
/* セッターを定義 */
Date.prototype.__defineSetter__("currentDate", function(d) { this.setDate(d); });
var today=new Date();
today.currentDate = 20; // currentDateを左辺に使用するとsetDate()が呼び出される
var current = today.currentDate; // 右辺に使用するとgetDate()が呼び出される
No.4
- 回答日時:
>・メソッド名に「set」「get」が付いているので、てっきりセッターゲッターみたいな物だと思ったのですが…
セッターなら左辺に書くので、返り値どころか呼び出しも無いですよ。
>・マニュアルを見たら、「インスタンスを生成した関数を返します。これはデフォルトでは Date コンストラクタです」と書かれているのですが、これはどういう意味なのでしょうか?
>・コンストラクタなのに、プロパティ? インスタンスを生成した関数?
単純なOOPです。
DateクラスをC++で書くと、こんな感じでしょうか。(微妙にCが混ざってます)
class Date{
private:
time_t currentTime;
public:
Date(){ time(¤tTime); } /* ※ */
double getDate(){
return currentTime;
}
void setDate(now){
currentTime = now;
}
}
Date today = new Date();
cout<<today.getDate();
today.setDate(1234567);
cout<<today.getDate();
----------------
(ほぼ同じ物を)JavaScriptで記述。
function Date(){
var currentTime=123;/*現在時刻を仮定*/
this.getDate=function(){
return currentTime;
};
this.setDate=function(now){
currentTime = now;
};
}
var today=new Date();
document.write(today.getDate());
today.setDate(1234567);
document.write(today.getDate());
---------------------------
C++では※の部分だけがコンストラクタですが、
JavaScriptのコンストラクタは、C++やJavaなどのコンストラクタとは異なり、
クラス全体の事を「コンストラクタ」と呼びます。
本来、JavaScriptにはクラスという概念がありません。
C++などの「クラス」が、JavaScriptでコンストラクタと呼ばれています。
定義している部分(コーディング時)をクラス、呼び出している部分(実行時)をコンストラクタと呼ぶ、と考えてみてください。
>>このプロパティの値は関数そのものの参照であり、関数の名前を含んだ文字列ではないことに注意してください
>・関数そのものの参照って何ですか?
すみません、その言葉はどこに書かれているのでしょうか。
その文章の前後に、その意味が書かれていると思います。
変数に代入できるのは文字列や数値だけでなく、関数も可能ですし、代入した関数を呼び出す事も出来ます。
、、、ということでしょうか。。。?
yesterday = 'Date'; // 'Date'という文字列を代入
yesterday = Date; // Date関数を代入
>・Dateオブジェクトの実体はどこに存在しているのでしょうか?
上記の例でいうと、today変数がDateオブジェクトの実体です。
回答ありがとうございました
>JavaScriptのコンストラクタは、C++やJavaなどのコンストラクタとは異なり、
>クラス全体の事を「コンストラクタ」と呼びます。
>本来、JavaScriptにはクラスという概念がありません。
>C++などの「クラス」が、JavaScriptでコンストラクタと呼ばれています
・初めて知りました
・検索してびっくりしました(こんなに違うとは全く思っていませんでした)
>変数に代入できるのは文字列や数値だけでなく、関数も可能ですし、代入した関数を呼び出す事も出来ます。
>yesterday = 'Date'; // 'Date'という文字列を代入
>yesterday = Date; // Date関数を代入
・この説明、大変分かりやすかったです
No.3
- 回答日時:
すみません、よく質問の意味が理解できません
「返り値」とはなんでしょうか?
getTimeやsetTimeはセッターやゲッターではなく関数で
どちらも呼べばUTCミリ秒の返り値を返します
関数そのものの参照とは
一言で言えばprototype、他の言語で言うClassのような仕組みです
例えば d=new Date() としたとき実はdはgetTime等のメソッドを持っていません
__proto__を遡って親のDateがもつメソッドを参照しているのです
メソッドではレシーバー(ここではd)を指すthisを使うことにより対象を見分けています
なぜこんな仕組みなのかというと、1つ1つのオブジェクトに固有のメソッドを割り当てていてはいろんな無駄が大きいからです
こういう仕組みなので例えばthisを明示的に与えてあげれば面白いことがおきます
d1=new Date()
d2=new Date()
d1.getTime.call(d2)
はd1ではなくd2の時間を返すでしょう
d1.getTime と d2.getTime は全く同じ関数を参照していて
その関数ではあくまでthisを使って対象を見分けるからです
もっと問題になりそうな例では
d=new Date()
gt=d.getTime
gt()
これは処理系にもよりますがエラーになります
なぜなら
d.getTime としたならDate.prototype.getTimeはthisがdだとわかりますが
gtはwindow.gtということであり、thisにwindowが入ってしまうからです
これはDOMなど、いろんなところに隠れている危険です
・回答ありがとうございました
・知らないことばかりだったので、勉強になりました
・callメソッド、初めて知りました
・ネットで調べたら、「第一引数にthisとしたいオブジェクトを指定」て書いてあったので、ようやく理解できました
>d1.getTime と d2.getTime は全く同じ関数を参照していて
>その関数ではあくまでthisを使って対象を見分ける
・この説明は分かりやすかったです
>gtはwindow.gtということであり、thisにwindowが入ってしまうからです
>これはDOMなど、いろんなところに隠れている危険
・ここも初め意味が全く分からなかったのですが、ネット検索したら同じような内容が色々なサイトで解説されていたので、ようやく意味が分かりました
・難しい内容だったけど、参考になりましたー
No.2
- 回答日時:
> メソッド名に「set」「get」が付いているので、てっきりセッターゲッターみたいな物だと思ったのですが…
セッターって普通返り値いらないよね?
> ・直接プロパティ値を書き換えるのでしょうか? 参照みたいに
メソッドなのですから書き換えるのはそのメソッドを呼び出したときのオブジェクトです。
var d = new Date();
alert(d); //現在時刻
d.setTime(0); //オブジェクトdが保持している時刻を書き換え
alert(d); //1970年1月1日
> ・マニュアルを見たら、「インスタンスを生成した関数を返します。これはデフォルトでは Date コンストラクタです」と書かれているのですが、これはどういう意味なのでしょうか?
それsetTimeの説明じゃないよ、違うところ見てる。
> >このプロパティの値は関数そのものの参照であり、関数の名前を含んだ文字列ではないことに注意してください
> ・関数そのものの参照って何ですか?
> ・Dateオブジェクトの実体はどこに存在しているのでしょうか?
要するに
var d = new Date();
alert(d.constructor===Date); //true: オブジェクトdのプロパティconstructorはDate関数そのもの
ということです。
回答ありがとうございます。
>セッターって普通返り値いらないよね?
・$this -> プロパティ = obj.setTime(d);みたいな感じで、思っていたんですけど、違うんですね
>alert(d.constructor===Date); //true: オブジェクトdのプロパティconstructorはDate関数そのもの
・alert(d.constructor);試したら、本当に関数そのものが表示されて、ちょっとびっくりしました
function Date() { [native code] }
・関数そのもの、ってプロパティになり得るんですね…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- Visual Basic(VBA) マクロについて教えてください。 1 2023/06/06 00:57
- Excel(エクセル) DATE関数で指定する「日」のセルが関数の場合の対処法 5 2022/09/14 15:46
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでの[]
-
Excel VBA 定数にオブジェクト...
-
VB.netでメソッドからコントロ...
-
エクセルVBA 画像を貼り付ける...
-
servletからjspへオブジェクト...
-
java名簿管理プログラム
-
VB.netでJavaのCollection.shuf...
-
Dispose()は、どんな時に使うの...
-
UTF-8のテキストファイルを開く...
-
C#のクラスで値渡しをする
-
String型からlong型への変換は...
-
VB.NETでのnothing の意義について
-
javaで配列の中身を表示する方法
-
javaで、、、
-
オブジェクトの参照渡しについて
-
GridViewに行追加するには?
-
コードの意味を解説して頂けな...
-
ピクチャーボックスに点を打つ...
-
MessageBox.Show(Me,…の「Me」...
-
Vba ListViewの行挿入に関して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでの[]
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
C#のクラスで値渡しをする
-
VB.netでメソッドからコントロ...
-
Vba ListViewの行挿入に関して...
-
VB.NETでのnothing の意義について
-
Excel VBA 定数にオブジェクト...
-
Dispose()は、どんな時に使うの...
-
servletからjspへオブジェクト...
-
ピクチャーボックスに点を打つ...
-
JSPでのArrayListの表示につい...
-
MessageBox.Show(Me,…の「Me」...
-
String型からlong型への変換は...
-
PrintFormを使用してのプリント
-
getParameter()について
-
ArrayListのデバッグ方法について
-
VBスクリプトでテキストファイ...
-
エクセルVBA/SpecialCellsで特...
-
オブジェクトの参照渡しについて
おすすめ情報