.createについて2

コンソールで実行した結果

“create” in field
ReferenceError: field is not defined
“create” in Field
true
“init” in Field
false
“update” in Field
false
delete Field.create
true
“create” in Field
false

Fieldはcreateメソッドをもっている。
Fieldはinitメソッドをもっていない。
fieldは定義されていません。

コンストラクタとオブジェクトの違いがいまいちわからないんだよなー
cc.Layer.extend()は何を返してるんだろう。

console.log(field.constructor === Object);
>> false
console.log(field.constructor === Field);
>> true

上記よりfieldのconstructorプロパティにはFieldへの参照が格納されているということ。

console.log(field instanceof Object);
>> true
console.log(field instanceof Field);
>> true

instanceof 演算子は、object が class のインスタンスである場合に true を返します。 オブジェクトのプロトタイプ チェーンに class が存在する場合は、true を返します。 object が class のインスタンスではない場合、または object が null の場合は false を返します。

プロトタイプチューンもか。なのでObjectクラスに対してもtrueを返している。

console.log(“create” in Field);
>>true Fieldコンストラクタにcreateはある。
console.log(Field.hasOwnProperty(“create”));
>>true Fieldコンストラクタにcreateはある。

ここだけよく分からないよー
console.log(“create” in field);
>>false 下に同じ
console.log(field.hasOwnProperty(“create”));
>>false field.createは確かにおかしいけど、Fieldコンストラクタのプロパティにあるのでインスタンス化したら生成されるのでは?

console.log(“create” in field.constructor);
>>true プロパティにある。
console.log(field.constructor.hasOwnProperty(“create”));
>>true Field.create()している。自分自身のプロパティ。
console.log(“init” in field);
>>true field.init()してるし、プロパティに存在している。
console.log(field.hasOwnProperty(“init”));
>>false オーバーライドしているので自分自身のではないといえばない?

Field.create = function(){
    var field = new Field();
    field.init();//フィールド初期化処理(イニシャライザ)
    return field;
};

インスタンス化された時点ではcreateメソッドはない。
コンストラクタープロトタイプ
プロトタイプーインスタンスの関係をもう少し理解しよう。

スポンサーリンク
RESAD
RESAD

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
RESAD