person
は、object
です。 、などhasOwnProperty()
// Object initialiser or literal
person = {
some methods and properties
}
// Called as a constructor
person = new Object({some methods and properties})
あなたperson
目的は、プロトタイプから特定のメソッドをオブジェクト継承することを意味する。換言すれば、person
はObject
のインスタンスであり、person
プロトタイプは{}
イニシャライザによって作成され、他のオブジェクト内のプロトタイプと同じですtoString()
,valueOf()
など
最後に書かれたObject constructor
は、ハッシュのようなオブジェクトだけでなく、他のタイプのオブジェクト(配列、文字列など)も作成できます。 javascriptのすべては、オブジェクト、プリミティブさえあります(ラッパーオブジェクトを持ち、独自のコンストラクタを持っています)。
例:
persons = new Object([person_1, person_2, person_3])
person_age = new Object(18)
person_name = new Object('John')
我々は他の構文で上記の式のすべてを書くことができます
persons = new Array(person_1, person_2, person_3) //or
persons = [person_1, person_2, person_3]
person_age = new Number(18) //or
person_age = 18
person_name = new String('John') //or
person_name = 'John'
文字列と数値はnew
Page on MDNことなく、適切なグローバルオブジェクトを使用して作成することができます
新しいオブジェクト型
に新しいタイプのオブジェクトを作成する必要がある場合、(ECMAScriptの5.1)新しいコンストラクタ関数を定義し、プロトタイプを定義する必要があります
NewObjectType = function(arg1, arg2){
this.arg1 = arg1 //define object's property arg1
this.arg2 = arg2 //define object's property arg2
private_function = function(){}
this.public_function = function(){} //this function can't be inherited, because not in prototype
}
NewObjectType.prototype = {
constructor : NewObjectType,
public_inheritable_function_1 : function(){},
public_inheritable_function_2 : function(){}
}
//creating new instance of NewObjectType:
my_new_object = new NewObjectType(arg1, arg2)
my_new_object instanceof NewObjectType //true
my_new_object instanceof Object //true, because prototype was created with {} literal, and Object's prototype built into the prototype chain
説明:
new NewObjectType
がある場合にはNewObjectTypeの新しいインスタンスが作成されます。 NewObjectType
コンストラクタ関数のPrototype
プロパティは、新しいインスタンスのhiddenプロパティ__proto__
とリンクされます。プロトタイプなし
オブジェクト
オブジェクトのメソッドずに明確なオブジェクトを作成する必要がある場合は、メソッドを作成して使用してプロトタイプせず、それを作成する必要があります。
person = Object.create(null)
これは、単純なキーと値のストレージとして有用である可能性がありますObjectから継承されていないことを
タイプ、
プロトタイプチェーン内のオブジェクトのプロトタイプせずにオブジェクトの新しいタイプを作成する必要がある場合、あなたは構文の下に使用することができます。
NewObjectType = function(arg1, arg2){}
NewObjectType.prototype = Object.create(null)
NewObjectType.prototype.constructor = NewObjectType
NewObjectType.prototype.public_inheritable_function = function(){}
my_new_object = new NewObjectType(arg1, arg2)
my_new_object instanceof NewObjectType //true
my_new_object instanceof Object //false
を私はいつもあまりにも混乱していることがわかりました。そして、信頼できない。私は詳細な答えを見るのは非常に興味がありますが、私の解決策は常に:それを使用しないでください。私は '関数Person'と' Person = new Person'を作ります。ときどき全静的で十分ですが、 'person.firstName'などはどこでも使えますので、' this'はありません。もちろん、ただの意見。 – Rudie
混乱しているか信頼できないと思いますか?オブジェクトがメソッドを持つことができるという事実? – vol7ron
JavaScriptでは、クラスはありません**(ただし、シミュレートすることはできます)。ここで、オブジェクトは他のオブジェクトから直接継承されます。 JSプロトタイプについて読んでください。 –