文書の過去の版を表示しています。
— y2sunlight 2020-10-28
JavaScriptでは関数オブジェクトがクラスの役割を果たします。以下の例の様に、関数リテラルを使ってクラスを記述することができます。
var Student = function(name) { // コンストラクタ this.name = name; // プロパティ this.greeting = function() { // メソッド console.log(`I am ${this.name}`); }; }; var suzuki = new Student('suzuki');
this.プロパティ名
でプロパティを定義する。この例と同様に、次の様に名前付きの関数定義によってクラスを記述することができます。
function Student(name) { // コンストラクタ this.name = name; // プロパティ this.greeting = function() { // メソッド console.log(`I am ${this.name}`); }; }; var suzuki = new Student('suzuki');
var 変数名 = new オブジェクト名([引数, ・・・])
this.プロパティ名
var name = suzuki.name(); // プロパティの読み込み suzuki.name = 'suzuki taro'; // プロパティの書き込み suzuki.greeting(); // メソッドの呼び出し
静的プロパティ(またはメソッド)は、インスタンスを生成しなくてもオブジェクトから直接呼び出すことができるプロパティ(またはメソッド)です。これは以下の様に定義することができます。
オブジェクト名.プロパティ名 = 値; オブジェクト名.メソッド名 = function() {/* メソッドの定義 */};
var Student = function(name) { this.name = name; // インスタンスプロパティ this.greeting = function() { // インスタンスメソッド console.log(`I am ${this.name}.`); }; } Student.age = 15; // 静的プロパティ Student.getSchoolName = function() { // 静的メソッド return 'AbcSchool'; } console.log(Student.age); // OK (15) console.log(Student.getSchoolName()); // OK (AbcSchool)
静的プロパティ(またはメソッド)は
var taro = new Student('taro'); taro.name = 'suzuki taro' // OK taro.greeting(); // OK (I am suzuki taro.) console.log(taro.age); // NG (undefined) console.log(taro.getSchoolName()); // NG (taro.getSchoolName is not a function)
var Student = function(name) { this.name = name; }; Student.prototype.greeting = function() { console.log(`I am ${this.name}.`); }; // 年齢(age)はオブジェクト毎に保持されるべきなので、prototypeには適さない。 // 但し参照のみの初期値として使用することはできる。 Student.prototype.age = 15; // suzukiはStudentのprototypeの参照を保持する。 var suzuki = new Student('suzuki'); suzuki.greeting(); // 結果:I am suzuki.
オブジェクト | 説明 | |
---|---|---|
Global | JavaScriptの基本機能 | |
参照型 | Object | ラッパーオブジェクト JavaScriptの標準なデータ型(基本型、参照型)をラップしたもの |
Array | ||
Function | ||
基本型 | String | |
Boolean | ||
Number | ||
Symbol | ||
Math | 数値演算 | |
Date | 日付 | |
RegExp | 正規表現 | |
Error/XxxxError | エラー | |
Map/WeakMap*2015 | ディクショナリー | |
Set/WeakSet*2015 | 集合(セット) | |
Proxy*2015 | オブジェクトの基本動作のカスタマイズ | |
Promise*2015 | 非同期処理 |
var str = 'こんにちは'; // 基本型のプロパティにアクセスすると一時的にオブジェクトが作られる // str.length => (new String(str)).length console.log(str.length);
// 基本型 var flag = false; if(flag){ // ここには来ない } // 参照型 var flag = new Boolean(false); if(flag){ // ここには来る } if(flag.valueOf()){ // 正解の書き方 // ここには来ない }