計算機科学のブログ

オブジェクトを学ぶ クラス、継承、データ、constructor、メソッド

ハンズオンJavaScript (あんどうやすし(著)、オライリー・ジャパン)の4章(オブジェクトを学ぶ)、4.8(練習問題)の4-1、2、3の解答を求めてみる。

コード

console.log('4-1')

class User {
    constructor(id, name) {
        this.id = id;
        this.name = name;
    }
    post() {
        console.log(`${this.id} ${this.name}: 記事を投稿`);
    }
}
class Administrator extends User {
    constructor(id, name) {
        super(id, name);
    }
    publish() {
        console.log(`${this.id} ${this.name}: 記事を公開`);
    }
}

let user = new User('1', 'name1');
user.post();

let admin = new Administrator('2', 'name2');
admin.post();
admin.publish();

console.log('4-2');
for (let u of [user, admin]) {
    console.log(u);
    console.log("User", u instanceof User);
    console.log("Administrator", u instanceof Administrator);
}

console.log('4-3');

let user1 = {
    id: 10,
    name: "name10",
    post() {
        console.log(`${this.id} ${this.name}: 記事を投稿`)
    }
},
    admin1 = {
        __proto__: user1,
        publish() {
            console.log(`${this.id} ${this.name} 記事を公開`)
        },
    };
user1.post();
admin1.post();
admin1.publish();

入出力結果(Terminal, Zsh)

% node sample1.js
4-1
1 name1: 記事を投稿
2 name2: 記事を投稿
2 name2: 記事を公開
4-2
User { id: '1', name: 'name1' }
User true
Administrator false
Administrator { id: '2', name: 'name2' }
User true
Administrator true
4-3
10 name10: 記事を投稿
10 name10: 記事を投稿
10 name10 記事を公開
%