JSにはシステムで元から用意されているコンストラクタもある。
例えば、、
- 文字列に対するコンストラクタ
- 配列に関するコンストラクタ
- 関数に関するコンストラクタ
などなど。
文字列に対するコンストラクタ
Stirngコンストラクタについて
jsの文字列はStringコンストラクタから生成されたオブジェクトとして見なすことができる。
以下の二つは書き方は違うが、どちらも'こんにちは'という文字列情報を生成している。
var data = new String('こんにちは');
var data = 'こんにちは';
わざわざStringコンストラクタを実行して文字列を作ると、同じ文字列でも別々のオブジェクトとして生成される。
どうゆうことかと言うと…
var data1 = 'こんにちは';
var data2 = 'こんにちは';
data1 == data2 // true
こちらは文字列情報が同じ場合、変数が違っても、同じオブジェクトを参照するが、
var data1 = new String('こんにちは');
var data2 = new String('こんにちは');
data1 == data2 // false
こちらは同じ文字情報でも、異なるオブジェクトとして生成されている。
Stirngコンストラクタのメソッド
全ての文字列はStirngコンストラクタに定義されたメソッドを実行することができる。
例えば、toUpperCaseメソッドは英語の小文字を大文字に変換してくれるメソッド。
var data = "hoge";
data = data.toUpperCase();
console.log(data); //HOGE
配列に対するコンストラクタ
Arrayコンストラクタについて
jsの配列はArrayコンストラクタから生成されたオブジェクトとみなすことができる
以下の二つは書き方は違うが、どちらも空の配列を生成している。
var data = new Array();
var data = [];
Arrayコンストラクタのメソッド
Arrayコンストラクタに定義されたメソッドを実行できる。
例えば、sortメソッドは配列の要素を昇順にソートしてくれるメソッド。
var data = [3,4,5,1,2];
data = data.sort();
console.log(data); //[1,2,3,4,5]
ちなみに、連想配列はArrayコンストラクタから生成していないので、これらのメソッドを使用することができない。
関数に対するコンストラクタ
Functionコンストラクタについて
jsの関数はFunctionコンストラクタから生成されたオブジェクトと見なすことができる。
最後の引数には、生成する関数の実行コードを指定。
それ以外には生成する関数の引数名を指定。
以下の3つは書き方は違うが、どれも関数addを定義しており、実行方法、結果共に同じ。
var add = new Function('num1','num2','return num1 + num2');
function add(num1,num2){
return num1 + num2;
};
var add = function(num1,num2){
return num1 + num2;
};
Functionコンストラクタのメソッド
Functionコンストラクタに定義されたメソッドを実行できる。
例えば、callメソッドは関数内で使用するthisの参照先を変更することができます。
var Sample = function(value){
this.value = value;
};
Sample.prototype.show = function(){
console.log(this.value)
}
var sample1 = new Sample(1);
var sample2 = new Sample(2);
sample1.show(); // 1を表示
sample2.show(); // 2を表示
sample1.show.call(sample2) // thisの参照先がsample2に代わり、2を表示