##※注意
通常組み込みオブジェクトの内容を変更することは推奨されておりません。
学習用途以外では行わないようにしてくださいませ。
##本文
Date
クラスについてchrome
のコンソールを用いていろいろいじってみています。
その中でふとDate
クラスのconstructor
に処理を追加してみようとしました。
しかし思ったような挙動になりませんでした。
javascript
1Date.prototype.constructor(); 2// Tue Jun 18 2019 18:27:27 GMT+0900 (日本標準時) 3 4var itti = Date.prototype.constructor 5var aaa = function(...args){ 6 itti(...args) 7 console.log('abesi'); 8} 9Date.prototype.constructor = aaa; 10 11itti(); 12// Tue Jun 18 2019 18:27:43 GMT+0900 (日本標準時) 13aaa(); 14// abesi 15Date.prototype.constructor(); 16// abesi
以下のような出力を期待していたつもりです。(現実は上)
javascript
1Date.prototype.constructor() 2// Tue Jun 18 2019 18:27:43 GMT+0900 (日本標準時) 3// abesi
関数の値渡しミスなどが理由ならエラーが出るかとも思ったのですがエラーも出ずこの状態になったことで更によく解らなくなってしまいました・・・
お時間ありましたらご教示いただけると幸いです。
##補足
javascript
1class Aa { 2 constructor(){ 3 console.log("hidebu"); 4 } 5} 6Aa.prototype.constructor(); 7//Uncaught TypeError: Class constructor Aa cannot be invoked without 'new'
適当なクラスを作ってコンストラクター関数だけ使用しようとしてみるとエラーとなります。
ビルトインオブジェクト
故にできない事なのかも?わからないですが・・・
##追記1
いろいろお答えいただき本当にありがとうございます。
当初私が作ってみたいと思った状況は
javascript
1class Aa extends Date{ 2 constructor(...arg){ 3 super(...arg); 4 console.log("アベシ"); 5 } 6}; 7Date = Aa; 8new Date() 9// アベシ 10// 22:27:02.908 Wed Jun 19 2019 22:27:02 GMT+0900 (日本標準時)
で作ることが出来ました。
しかし未だ
javascript
1var itti = Date.prototype.constructor 2var aaa = function(...args){ 3 itti(...args); 4 console.log('abesi'); 5} 6Date.prototype.constructor = aaa;
を行ってから
javascript
1new Date()
を行うとabesiと出てこない事の理由がわかりません。
また、私はプログラムについて何か仕事をしているわけでもなんでもなく、
ただの好奇心からの質問です。混乱させてしまいすみません。
仕事で行う人がいたらかなり危険だとも思いますので、
もしこの質問の最上に注意を書かせていただきました。