-
Notifications
You must be signed in to change notification settings - Fork 0
/
CH4-2.coffee
117 lines (82 loc) · 2.12 KB
/
CH4-2.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
###
クラスの定義
###
###
クラスとインスタンスの作成
###
# Birdクラスを定義する
class Bird
nickname: "ある鳥"
# 2つのインスタンスを作る
birdA = new Bird
birdB = new Bird
console.log birdA.nickname
console.log birdB.nickname
#インスタンスにプロパティをセットする
class Bird
nickname: "ある鳥"
birdA = new Bird
birdB = new Bird
birdA.nickname = "太郎"
console.log birdA.nickname
console.log birdB.nickname
# インスタンスへの変更はお互いに影響しない
class Bird
nickname: "ある鳥"
birdA = new Bird
birdB = new Bird
birdA.nickname = "太郎"
birdB.nickname = "次郎"
console.log birdA.nickname
console.log birdB.nickname
###
プロパティの参照のされ方
クラスのプロパティとインスタンスのプロパティは別のもの
###
class Bird
nickname: "ある鳥"
birdA = new Bird
# インスタンスにプロパティが定義される
birdA.nickname = "太郎"
# birdからnicknameプロパティを削除する。インスタンスのプロパティが削除されるが、クラスのパロパティが削除されたわけではない。
delete birdA.nickname
# インスタンスのプロパティがないので、クラスのプロパティを参照する
console.log birdA.nickname
###
メソッドの作成
###
class Bird
# プロパティ
nickname: "ある鳥"
# メソッド
sing: ->
console.log "チュンチュン"
birdA = new Bird
birdA.sing()
###
prototype
###
# クラスのプロパティを動的に追加する
class Bird
nickname: "ある鳥"
birdA = new Bird
console.log birdA.location
Bird.prototype.location = "木の上"
console.log birdA.location
# ::と書くこともできる
Bird::sing = ->
console.log "チュンチュン"
birdA.sing()
Bird::sing()
###
コンストラクタ
###
class Bird
constructor: ->
# @は、インスタンス自信を指すため、birdA.nicknameに代入するのと同じ効果となる
@nickname = "ある鳥"
console.log Bird::nickname
birdA = new Bird
console.log birdA.nickname
delete birdA.nickname
console.log birdA.nickname