JavaScriptでオブジェクトといえば、まずこんな感じのオブジェクトリテラルな記述です(他にもありますが説明の都合上、割愛します)。
[php]
var objA {
name: Tom,
scrore: 51
};
[/php]
JavaScriptのプロトタイプ継承
オブジェクトリテラルを前提として、加えてプロトタイプ継承を行うと、こんな感じになるかと思います。
[php]
var objA {
name: Tom,
scrore: 51
};
objA.__proto__ = objB;
[/php]
つい最近までは、ECMAScriptという言葉自体も知らなくて、これが普通だと思っていました。
ECMAScript6からクラス構文の導入
ところが、JavaScriptの標準手続きであるECMAScript(エクマスクリプト)を読んでいると、ECMAScript5からECMAScript6に変わっていることが分かりました。6ではJavaScriptでもクラス構文が使えるようになったそうです。例文となるコードをGitHubにUPしていますので、6について詳しく解説していきましょう。
クラス定義
[php]class Person {
}[/php]
見たまんまですね。クラス構文の宣言です。PHPを学習しているとしょっちゅう出くわします。
コンストラクタによる初期化
[php]constructor (name) {
this.name = name;
}[/php]
Personクラスが呼び出されたびに、constructorメソッドでメンバ変数である、nameの初期化を行います。
プロトタイプのメソッド
[php]get name() {
return this._name;
}
set name(value) {
return this._name = value;
}
sayHello () {
console.log("Hello! " + this.name);
}[/php]
プロトタイプのメソッドです。sayHelloメソッドの前に、アクセッサの記述を行います。メンバ変数の前にgetキーワードをつけるとゲッターになり、setキーワードをつけるとセッターとして認識されます。
インスタンスの生成
[php]var person = new Person("Bob");
person.sayHello();[/php]
インスタンスを生成すると、”Hello! Bob”が返ってきます。同じくGitHubにUPしている5についても、実行するとやはり”Hello! Bob”が返ってきます。プロトタイプ継承を行うためには、5では”__proto__”を、6ではgetキーワードとsetキーワードを使って受け渡しをしているという感じがします。
自分の場合は、JavaScriptと並行してPHPも学習しているので、あまり違和感は感じませんでした。ただしばらくの間は、5と6のいずれの書き方も覚えておく必要があるように思います。
【参考サイト】