この記事の英語版を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Object.defineProperties 関数 (JavaScript)

 

1 つ以上のプロパティをオブジェクトに追加したり既存のプロパティの属性を変更したります。


object.defineProperties(object, descriptors)

object

Required.  プロパティを追加または変更するオブジェクトを指定します。  これは JavaScript のネイティブ オブジェクトまたは DOM オブジェクトです。  

descriptors

Required.  1 つ以上の記述子オブジェクトを含む JavaScript オブジェクトを指定します。  各記述子オブジェクトは、データ プロパティまたはアクセサー プロパティについて記述します。  

関数に渡されたオブジェクト。

descriptors 引数は、1 つ以上の記述子オブジェクトを含むオブジェクトです。

データ プロパティは、値を格納および取得できるプロパティです。  データ プロパティ記述子には、value 属性、writable 属性、またはその両方が含まれます。  詳細については、「データ プロパティとアクセサー プロパティ」を参照してください。  

アクセサー プロパティは、プロパティ値が設定または取得されるたびにユーザーが指定した関数を呼び出します。  アクセサー プロパティ記述子には、set 属性、get 属性、またはその両方が含まれます。  

オブジェクトに既に指定された名前のプロパティがある場合は、プロパティの属性が変更されます。  詳細については、「Object.defineProperty 関数 (JavaScript)」を参照してください。  

オブジェクトを作成し、新しいオブジェクトにプロパティを追加するには、Object.create 関数 (JavaScript) を使用できます。

ユーザー定義オブジェクトにデータ プロパティとアクセサー プロパティを追加する Object.defineProperties 関数の例を次に示します。

例では、オブジェクト リテラルを使用して、newDataProperty 記述子オブジェクトと newAccessorProperty 記述子オブジェクトを含む descriptors オブジェクトを作成します。

var newLine = "<br />";

var obj = {};
Object.defineProperties(obj, {
    newDataProperty: {
        value: 101,
        writable: true,
        enumerable: true,
        configurable: true
    },
    newAccessorProperty: {
        set: function (x) {
            document.write("in property set accessor" + newLine);
            this.newaccpropvalue = x;
        },
        get: function () {
            document.write("in property get accessor" + newLine);
            return this.newaccpropvalue;
        },
        enumerable: true,
        configurable: true
    }});

// Set the accessor property value.
obj.newAccessorProperty = 10;
document.write ("newAccessorProperty value: " + obj.newAccessorProperty + newLine);

// Output:
// in property set accessor
// in property get accessor
// newAccessorProperty value: 10

前の例のように、次の例は、オブジェクトのリテラルではなくプロパティを動的に追加します。


var newLine = "<br />";

// Create the descriptors object.
var descriptors = new Object();

// Add a data property descriptor to the descriptors object.
descriptors.newDataProperty = new Object();
descriptors.newDataProperty.value = 101;
descriptors.newDataProperty.writable = true;
descriptors.newDataProperty.enumerable = true;
descriptors.newDataProperty.configurable = true;

// Add an accessor property descriptor to the descriptors object.
descriptors.newAccessorProperty = new Object();
descriptors.newAccessorProperty.set = function (x) {
    document.write("in property set accessor" + newLine);
    this.newaccpropvalue = x;
};
descriptors.newAccessorProperty.get = function () {
    document.write("in property get accessor" + newLine);
    return this.newaccpropvalue;
};
descriptors.newAccessorProperty.enumerable = true;
descriptors.newAccessorProperty.configurable = true;

// Call the Object.defineProperties function.
var obj = new Object();
Object.defineProperties(obj, descriptors);

// Set the accessor property value.
obj.newAccessorProperty = 10;
document.write ("newAccessorProperty value: " + obj.newAccessorProperty + newLine);

// Output:
// in property set accessor
// in property get accessor
// newAccessorProperty value: 10

オブジェクトのプロパティ属性を変更するには、次のコードを追加します。   Object.defineProperties 関数は、newDataPropertywritable の属性を変更し、newAccessorPropertyenumerable の属性を変更します。  オブジェクトにプロパティ名 anotherDataProperty が存在しないので、それをオブジェクトに追加します。  

Object.defineProperties(obj, {
    newDataProperty: { writable: false },
    newAccessorProperty: { enumerable: false },
    anotherDataProperty: { value: "abc" }
});

要件

Internet Explorer 9 標準モード、Internet Explorer 10 標準モード、および Windows 8.x ストア アプリでサポートされています。  Internet Explorer 8 では、DOM オブジェクトのみサポートされていますが、それ以外はサポートされていません。  

表示: