次の js オブジェクトなど、js 内のオブジェクトをコピーする方法。
このオブジェクトの属性をすべて知っている場合は、新しいオブジェクトを作成して、各属性に値を割り当てることができますが、知らない場合はどうすればよいでしょうか。同じ内容のオブジェクトを作成するにはどうすればよいですか?
var obj={colkey: "col" 、colsinfo: "NameList" }
最も簡単な方法は、for in を使用することです、
たとえば、obj2 は obj とまったく同じ属性を持ちます
var obj2=new Object(); )
{
var name=p;//属性名
var value=obj[p];//属性に対応する値
obj2[name]=obj[p]; >}
実際、このメソッドには特定の制限があります。重要なのは、for in in js にはオブジェクトのすべてのプロパティが対象となるのではなく、列挙可能なプロパティのみが対象となるということです。たとえば、tostring() など、js コアによって定義されたメソッドは列挙可能ではありませんが、コード内で定義されたプロパティはすべて列挙可能です (特別に非列挙可能として定義できます)。したがって、この方法で十分です。
オブジェクトが完全に対象であるかどうかは、propertyIsEnumerable 属性によって判断できます。説明は次のとおりです。
propertyIsEnumerable 属性
は、指定されたプロパティが一部であるかどうかを示すブール値を返します。オブジェクトの、およびプロパティが列挙可能かどうか。
object.propertyIsEnumerable(proName)
パラメータ
オブジェクト
必須。オブジェクト。
プロ名
必須。プロパティ名の文字列値。
説明
propertyIsEnumerable プロパティは、proName がオブジェクト内に存在し、For...In ループを使用して列挙できる場合に true を返します。 propertyIsEnumerable プロパティは、オブジェクトに指定されたプロパティがない場合、または指定されたプロパティが列挙可能でない場合に false を返します。通常、事前定義されたプロパティは列挙可能ではありませんが、ユーザー定義のプロパティは常に列挙可能です。
propertyIsEnumerable プロパティは、プロトタイプ チェーン内のオブジェクトを考慮しません。