# Source: core/shim/string.js

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

    /**
     * @external String
     */

    /**
     * Returns whether this string begins with a given substring.
     *
     * @function external:String#startsWith
     * @param {string} substring a potential substring of this string
     * @returns {boolean} whether this string starts with the given substring
     */
    if (!String.prototype.startsWith) {
        Object.defineProperty(String.prototype, 'startsWith', {
            value: function (start) {
                return this.length >= start.length &&
                    this.slice(0, start.length) === start;
            },
            writable: true,
            configurable: true
        });
    }

    /**
     * Returns whether this string ends with a given substring.
     *
     * @function external:String#endsWith
     * @param {string} substring a potential substring of this string
     * @returns {boolean} whether this string ends with the given substring
     */
    if (!String.prototype.endsWith) {
        Object.defineProperty(String.prototype, 'endsWith', {
            value: function (end) {
                var selfLength = this.length,
                    endLength = end.length;

                return selfLength >= endLength && this.indexOf(end, selfLength - endLength) !== -1;
            },
            writable: true,
            configurable: true
        });
    }