パラメーター:
(1)OBJ
必須。オブジェクトオブジェクトが割り当てられる変数の名前。
(2)値
オプション。 JavaScriptプリミティブデータタイプ(数、ブール、または文字列)。値がオブジェクトの場合、返されたオブジェクトは修正されていません。値がnull、「未定義」、または「提供されていない」の場合、コンテンツのないオブジェクトが作成されます。
オブジェクトオブジェクトの方法
オブジェクトがコンストラクターとして使用される場合、パラメーターを受け入れることができます。パラメーターがオブジェクトの場合、オブジェクトを直接返します。元のタイプの値の場合、値に対応するラッパーオブジェクトを返します。これを使用して、変数がオブジェクトであるかどうかを決定する関数を記述できます。
function isobject(value){return value === object(value);}オブジェクトオブジェクトにメソッドを展開する方法は2つあります。
オブジェクトオブジェクト自体に展開します
object.prototypeオブジェクトに展開します
Object.keysメソッドは、Object.getownPropertyNamesメソッドに非常に似ており、一般にオブジェクトのプロパティを横断するために使用されます。それらのパラメーターはすべてオブジェクトであり、すべて配列を返し、配列のメンバーはすべて(継承されるのではなく)オブジェクト自体の属性名です。 2つの違いは、前者は列挙可能な属性のみを返すことですが、後者は非解決不可能な属性名も返します。配列には承認できない属性の長さがあるため、配列は一般にObject.keysで通過します。
JavaScriptは、Object.keys(o)とobject.getownPropertyNames(o).lengthを介して取得できるオブジェクトプロパティの数を計算する方法を提供しません。
Object.Observeメソッドは、オブジェクトプロパティの変化を観察するために使用されます。
プロトタイプチェーン関連の方法:
object.create():オブジェクトの新しいオブジェクトとプロトタイプを生成します。
object.getPrototypeof():オブジェクトのプロトタイプオブジェクトを取得します。
オブジェクトインスタンスオブジェクトの方法
object.prototype.valueof():valueofメソッドの関数は、オブジェクトの値を返すことであり、デフォルトではオブジェクト自体が返されます。この方法の主な目的は、JavaScriptがタイプを自動的に変換するときに、この方法がデフォルトで呼び出されることです。
object.prototype.toString():ToStringメソッドの関数は、オブジェクトの文字列形式を返すことです。文字列の追加にオブジェクトを使用すると、ToStringメソッドが自動的に呼び出されます。
コールメソッドを使用して、任意の値でobject.prototype.tostringメソッドを呼び出して、この値のタイプを決定できます。さまざまなデータ型のToString方法の返品値は次のとおりです。
値:return [オブジェクト番号]
文字列:[return] [オブジェクト文字列]
Boolean:Returns [Object Boolean]
未定義:[return [オブジェクト未定義]
null:return [オブジェクトnull]
オブジェクト:「[オブジェクト」 +コンストラクターの名前 + "]を返します
object.prototype.tostring.call(2)// "[object number]" object.prototype.tostring.call( '')// "[Object String]"
この機能を使用して、TypeOF演算子よりも正確なタイプ判断関数を記述できます。
var type = function(o){var s = object.prototype.tostring.call(o); return s.match(// [object(。*?)/]/)[1] .tolowercase();}; type({}); //「オブジェクト」タイプ([]); //「配列」タイプ(5); // "番号"上記のタイプ関数に基づいて、特定のタイプのデータを特異的に決定するメソッドを追加することもできます。
['null'、 'undefined'、 'object、' array '、' string '、' number '、' boolean '、' function '、' regexp '、' element '、' nan '、' infinite ']。 };}); type.isobject({}); // trueType.isNumber(nan); // falsetype.iselement(document.createelement( 'div')); // 真実オブジェクトの属性モデル
JavaScriptでは、各属性には対応する属性オブジェクトがあり、属性のメタ情報を保存します。 object.getownPropertyDescriptorメソッドを使用して、Oオブジェクトのp属性の属性オブジェクトを読み取ります。属性オブジェクトには、次のメタ情報が含まれています。
値:このプロパティの値を表します。これはデフォルトでは未定義です(書き込み可能で構成可能なものの1つが真である限り、変更できます)。
書き込み:このプロパティの値を変更できるかどうかを示します。デフォルトは真です。
列挙可能:属性が列挙性であるかどうかを示します。デフォルトは真、つまり、属性は、forやobject.keys()などの操作に表示されます。一般的に、システムネイティブプロパティ(つまり、ユーザーで定義されていないプロパティ)は列挙できません。
「構成可能性」を示し、デフォルトはtrueです。 falseに設定されている場合、属性を削除できず、属性オブジェクトを変更してはならないことを意味します(値属性を除く、書き込み可能な場合は値を変更できます)。つまり、構成可能な属性は属性オブジェクトのライター性を制御します。
このプロパティを表す値関数(ゲッター)は、デフォルトで定義されていません。
このプロパティを表す値ストレージ関数(セッター)は、デフォルトで定義されています。
var o = {p: 'a'}; object.getownPropertyDescriptor(o、 'p'); // object {// value: "a"、// writable:true、// enumerable:true、// configurable:true //}object.definePropertyメソッドを使用すると、属性オブジェクトを定義して属性を定義または変更し、変更されたオブジェクトを返すことができます。フォーマットは次のとおりです。
object.defineProperty(object、propertyName、attributesObject)
object.definePropertyメソッドは3つのパラメーターを受け入れます。1つ目はプロパティが配置されているオブジェクト、2つ目はプロパティ名(文字列である必要があります)、3つ目はプロパティ説明オブジェクトです。この方法により、プロパティオブジェクトの書き込み可能、構成可能、および列挙可能なプロパティのデフォルト値はfalseです。
object.defineProperty(o、 "p"、{value: "bar"}); object.getownPropertyDescriptor(o、 'p'); // object {// value: "bar"、// writ://列挙可能:false、// configurable:false //}複数のプロパティが一度に定義または変更されている場合は、object.definePropertiesメソッドを使用できます。値関数が取得される(または値格付け機能セット)が定義された場合、書き込みが真に設定されないか、値属性が同時に定義され、それ以外の場合はエラーが報告されることに注意する必要があります。
var o = object.defineProperties({}、{p1:{value:123、列挙可能:true}、p2:{value: "abc"、列挙:true}、p3:{get:function(){return this.p1 + this.p2}、enumerable:true、true}});列挙可能は、「秘密」プロパティを設定するために使用できます。プロパティの列挙可能が誤っている場合、for .. in loop、object.keysメソッド、およびjson.stlingifyメソッドはプロパティを取得しませんが、その値はO.xxを介して直接取得できます。
for…in loopとobject.keysメソッドの違いは、前者にはプロトタイプオブジェクトから継承されたオブジェクトのプロパティが含まれ、後者にはオブジェクト自体のプロパティのみが含まれることです。列挙可能の値に関係なく、オブジェクト自体のすべてのプロパティを取得する必要がある場合は、object.getownPropertynamesメソッドを使用できます。
構成可能性変数を削除できるかどうかを決定します。変数がVARコマンドを使用して宣言されると、変数の構成可能はfalseであり、変数がVARコマンドを使用して宣言される(または属性割り当てを使用して変数が宣言されます)、変数の構成可能性は真です。これは、削除がオブジェクトのプロパティのみを削除できることを意味します。
var a1 = 1; //構成可能:falsesea2 = 1; //構成可能:true(this.a2 = 1に相当)
直接的な定義に加えて、プロパティはアクセサー機能を使用して定義することもできます。その中で、値ストレージ関数はSetterと呼ばれ、セットコマンドを使用します。値取得関数はGetterと呼ばれ、Getコマンドを使用します。アクセス関数を使用して、データオブジェクトとDOMオブジェクト間の双方向のバインディングを実現できます。
object.defineProperty(user、 'name'、{get:function(){return document.getElementById( "foo")。value}、set:function(newValue){document.getElementById( "foo")。value = newValue;}、configurable:true});オブジェクトのステータスを制御します
JavaScriptは、オブジェクトの読み取りおよび書き込み状態を正確に制御し、オブジェクトが変更されないようにする3つの方法を提供します。保護の最も弱い層は予防型であり、その後に最も強い凍結であるシールが続きます。
Object.Preventextensionsメソッドは、オブジェクトを新しいプロパティを追加できないようにすることができますが、削除コマンドを使用して既存のプロパティを削除できます。 Object.isextensibleメソッドを使用して、オブジェクトを追加できるかどうかを確認できます。
Object.Sealメソッドにより、オブジェクトが新しいプロパティを追加したり、古いプロパティを削除したりすることは不可能になります。 object.Sealは、既存の属性の属性オブジェクトの構成可能な属性をfalseに設定するため、属性オブジェクトを変更できなくなります。 Object.issealedメソッドは、オブジェクトがObject.Sealメソッドを使用するかどうかを確認するために使用されます。
Object.Freezeメソッドは、オブジェクトを新しい属性を追加できなく、古い属性を削除し、属性の値を変更でき、このオブジェクトを実際に定数にすることができます。 object.isprozenメソッドは、オブジェクトがobject.freeze()メソッドを使用するかどうかを確認するために使用されます。
上記の方法を使用して、オブジェクトのライター能力をロックしますが、オブジェクトのプロトタイプオブジェクトを変更することでプロパティを追加できます。
var o = new object(); object.preventextensions(o); var proto = object.getPrototypeof(o); proto.t = "hello"; ot // hello
解決策の1つは、プロトタイプをフリーズすることです。
var o = object.seal(object.create(object.freeze({x:1})、{y:{value:2、writable:true}})); objeg.getPrototypeof(o)= "hello"; ot // redefinedPS:
オブジェクトオブジェクトは、他のすべてのJavaScriptオブジェクトに含まれています。そのすべての方法とプロパティは、他のすべてのオブジェクトで利用できます。メソッドは、ユーザー定義のオブジェクトで再定義され、適切な時期にJavaScriptによって呼び出されます。 ToStringメソッドは、頻繁に再定義されたオブジェクトメソッドの例です。
この言語参照では、各オブジェクトメソッドの説明には、内部JavaScriptオブジェクトのデフォルトおよびオブジェクト固有の実装情報が含まれます。
IEの互換性の観点から、MicrosoftのMSDNドキュメントは「インターネットエクスプローラー6の前にインターネットエクスプローラーで導入されたオブジェクトオブジェクト」であるため、心配しないでください〜