保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
'use strict';
 
var callBound = require('call-bind/callBound');
 
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
var FromPropertyDescriptor = require('./FromPropertyDescriptor');
var Get = require('./Get');
var ToObject = require('./ToObject');
var ToPropertyDescriptor = require('./ToPropertyDescriptor');
 
var forEach = require('../helpers/forEach');
var getOwnPropertyDescriptor = require('../helpers/getOwnPropertyDescriptor');
var OwnPropertyKeys = require('../helpers/OwnPropertyKeys');
 
var $push = callBound('Array.prototype.push');
 
// https://262.ecma-international.org/6.0/#sec-objectdefineproperties
module.exports = function ObjectDefineProperties(O, Properties) {
    var props = ToObject(Properties); // step 1
    var keys = OwnPropertyKeys(props); // step 2
    var descriptors = []; // step 3
 
    forEach(keys, function (nextKey) { // step 4
        var propDesc = ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a
        if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b
            var descObj = Get(props, nextKey); // step 4.b.i
            var desc = ToPropertyDescriptor(descObj); // step 4.b.ii
            $push(descriptors, [nextKey, desc]); // step 4.b.iii
        }
    });
 
    forEach(descriptors, function (pair) { // step 5
        var P = pair[0]; // step 5.a
        var desc = pair[1]; // step 5.b
        desc = FromPropertyDescriptor(desc); // TODO: remove this once DefinePropertyOrThrow is fixed
        DefinePropertyOrThrow(O, P, desc); // step 5.c
    });
 
    return O; // step 6
};