2016-12-17 12 views
1

私はオブジェクトと配列の型を知っています。私はどのように使用する方法とオブジェクトと配列を作成する方法を知っているが、私はchildの種類とはどのようにchildの種類を作成するのか分からないのですか?「子供」の種類は何ですか?

これはクロームコンソールのスクリーンショットです。

Chrome console 'child' object

+1

コンソールでどのようにオブジェクトを取得しましたか?構造体とバックボーンのタグは、それがある種の 'Backbone.Model 'であることを示唆しています。 –

+0

はい私はBackbone.Modelを使っています。 – jasondayee

+1

そしてその出力の後ろには何らかの 'console.log(something_you_are_not_showing_us)'があります。 –

答えて

1

childという名前のカスタムクラスのインスタンスであるように思われます。

あなたがChromeのコンソールに次のコードを実行した場合

child

function child() {} 
new child(); 

あなたは同じ出力を見ることが、マイナスのすべてのプロパティ:通常はそれが仕事だ何のため

screenshot

、命名規則はChildのようなコンストラクタ関数の名前を大文字にすることですが、技術的には必要ありません。

+0

ありがとうございます。 – jasondayee

1

mu is too shortと一致する可能性が最も高いのは、Backbone.Modelのインスタンスであり、直接的または間接的(サブクラスを介して)です。

childと表示された理由は、Backboneの内部機構によるものです。 Backbone.Model.extendを使用すると、バックボーンは新しいクラスのコンストラクタを設定し、このコンストラクタの名前はchildです。これはcode for the .extend methodで容易に見ることができます。

あなたがランタイムに取得したものの有用な識別子を取得することは、不可能ではないにしても、困難です。私はクラスの名前を打つフィールドとして__classname__を使用するという習慣を取った。これは、私が検査しているオブジェクトの__proto__フィールドに表示されます。私はこれをデバッグ目的でのみ使用します。ここではクロームコンソールでの例です:

Chrome console example

1

@muは、オブジェクトのプロパティを見てからcorrectly guessed短すぎると、それはBackbone.Modelのインスタンスでした。あなただけへのアクセスを持っていたものの、

new child.constructor(...); 

ます。また、新しいコレクションでモデル(クラス)を使用することができます:あなたは正しいコンストラクタ引数を知って提供し、このように同じオブジェクト(クラス)の別のインスタンスを作成することができますモデルインスタンス:

new MyCollection = Backbone.Collection.extend({ 
    model: child.constructor, 
    ... 
}); 

として@Louis notedは、あなた自身をプロトタイプオブジェクトにいくつかの名前を入れない限り、オブジェクトのインスタンスのうち、合理的な(クラス)の名前を取得することはできません。私はしばしば私のモデルにいくつかの初期化コードを必要とし、それをメソッドに入れるのではなく、という名前のコンストラクタをと明示的にと宣言してそこに初期化コードを入れます。ここMyModelという名前の関数と同様:

var MyModel = Backbone.Model.extend({ 
    constructor: function MyModel(attributes, options) { 
    Backbone.Model.prototype.constructor.call(this, attributes, options); 
    ... 
    } 
}); 

次のようなChromeデベロッパーツールでオブジェクト(クラス)の名前を見ることができます:__classname___よう

var Car = Backbone.Model.extend({ 
    constructor: function Car(attributes, options) { 
    Backbone.Model.prototype.constructor.call(this, attributes, options); 
    } 
}); 

var Truck = Car.extend({ 
    constructor: function Truck(attributes, options) { 
    Car.prototype.constructor.call(this, attributes, options); 
    } 
}); 

Truck object instance

文字列プロパティは変更されずに利用できるようになりますミニコードでも。名前付きコンストラクタは、非拡張コードでのみ使用できます。コードを小さくした後でも意味のあるコンストラクタ名を確認する必要がある場合は、exclude them from manglingにする必要があります。

関連する問題