> function ClassA(){};
> var a = new ClassA();
> console.log(a.constructor);
[Function: ClassA]
> console.log(ClassA.prototype.constructor);
[Function: ClassA]
> Object.getOwnPropertyNames(ClassA.prototype);
[ 'constructor' ]
// ClassAのprototypeを書き換える
> ClassA.prototype = {
... foo: function(){console.log('foo');
..... }
... }
{ foo: [Function: foo] }
// ClassAのprototypeを書き換えたあとは、ClassAのprototypeからconstructorが消えて
'foo'のみになった。
> Object.getOwnPropertyNames(ClassA.prototype);
[ 'foo' ]
// in演算子を使うとプロトタイプまで遡ってプロパティがあるか確認する
> console.log('constructor' in a);
true
// hasOwnProperty(key)では、プロトタイプまで参照しない
// インスタンスも、インスタンスの元となるClassAにconstructorは存在しない。
> console.log(a.hasOwnProperty('constructor'));
false
> ClassA.hasOwnProperty('constructor');
false
> Object.hasOwnProperty('constructor');
false
// Objectのprototypeにconstructorがあることを発見
> Object.prototype.hasOwnProperty('constructor');
true