ES6式class定義とVanilla JavaScript式class定義
class A {
constructor(x, y) {
this.x = x
this.y = y
}
static equal(p) { return p.x == p.y }
}class methodはstaticを使って定義できても、class variableを定義出来ない。
A.constructor.prototype.foo = 100
A.foo // => 100
A.name = 'OK'
A.name // => OKこんな感じ! 2014-11-01の記事 http://js-next.hatenablog.com/entry/2014/11/01/034607
空のオブジェクトであるfoo、つまり、メンバの何も無いfooオブジェクトに、メンバを追加するには
foo = {}
foo.x = null
foo.y = nullとすれば良い。 同様にprototypeオブジェクトという空のオブジェクトにメンバを追加すれば、オブジェクトの雛形ができると言う仕組みを備えたプログラミング言語が、JavaScriptである。proto = 原、原始, type = 型
C = function() {}
C.prototype.x = 100
o = new C()
c.x // => 100
C.constructor.prototype.x = 1000
C.x // => x// Sun, 26 Aug 2018 11:03:07 +0900
// 特異メソッド、インスタンスメソッド、クラスメソッド
obj = {}
obj.key0 = 'value0'
obj['key1'] = 'value1'
// 空のオブジェクトがアレば、後からkey, valueペアを足していける
obj.id = function() { return this.key0 +'+' + this.key1}
console.log(obj.id()) // 特異メソッド
// インスタンスメソッドが欲しければ、コンストラクタの改造が必要
Object.prototype.key0 = 'value0'
Object.prototype.key1 = 'value1'
Object.prototype.id = function() { return this.key0 +'+' + this.key1}
o = new Object()
console.log(o.id()) // インスタンスメソッド
// クラスメソッドは?
// コンストラクタ関数同様、インスタンス生成無しでcall出来るメソッドは?
Object.constructor.prototype.show = function() { return this.skey0 +'+' + this.
skey1}
Object.constructor.prototype.skey0 = 'skey0'
Object.constructor.prototype.skey1 = 'skey1'
Object.constructor.prototype['skey2'] = 'skey2'
skey3 = Symbol('skey3')
p = {}
p[skey3] = 'Symbol'
// p[skey4] = 0
Object.constructor.prototype[skey3] = 'skey3'
console.log(Object.show())
console.log(Object.skey2)
console.log(Object.skey3)
console.log(p[skey3])
// ======= 継承関係
console.log(Function instanceof Object) // => true
console.log(Object instanceof Function) // => true
console.log(Array instanceof Function) // => true
console.log(Array instanceof Object) // => true
console.log(Object instanceof Array) // => false
console.log(p instanceof Object) // => true
console.log(typeof Array) // => function