Source: core/shim/object.js

/**
 * Defines standardized shims for the intrinsic `Object`.
 * @see {external:Object}
 * @module montage/core/shim/object
 */

/**
 * @external Object
 */

/**
 * Creates a new object that inherits prototypically directly from a given
 * prototype, optionally defining some properties.
 * @function external:Object.create
 * @param {Object} prototype the prototype to inherit, or
 * `null` for no prototype, which makes "__proto__" the only
 * special property name.
 * @param {Object} descriptor a property descriptor
 * @returns a new object inheriting from the given prototype and having
 * the given property descriptor.
 */
if (!Object.create) {
    Object._creator = function _ObjectCreator() {
        this.__proto__ = _ObjectCreator.prototype;
    };
    Object.create = function (o, properties) {
        this._creator.prototype = o || Object.prototype;
        //Still needs to add properties....
        return new this._creator;
    };

    Object.getPrototypeOf = function (o) {
        return o.__proto__;
    };
}

// These are used in montage.js to ascertain whether we can annotate
// objects with montage metadata.

// TODO documentation
if (!Object.isSealed) {
    Object.defineProperty(Object, "isSealed", {
        value: function () {
            return false;
        },
        writable: true,
        configurable: true
    });
}

// TODO documentation
if (!Object.seal) {
    Object.defineProperty(Object, "seal", {
        value: function (object) {
            return object;
        },
        writable: true,
        configurable: true
    });
}