diff --git a/extensions/amp-analytics/0.1/amp-analytics.js b/extensions/amp-analytics/0.1/amp-analytics.js index 84912cc880bf..ed7cd2fcf78c 100644 --- a/extensions/amp-analytics/0.1/amp-analytics.js +++ b/extensions/amp-analytics/0.1/amp-analytics.js @@ -46,6 +46,8 @@ variableServiceFor(AMP.win); const MAX_REPLACES = 16; // The maximum number of entries in a extraUrlParamsReplaceMap +const hasOwn = Object.prototype.hasOwnProperty; + export class AmpAnalytics extends AMP.BaseElement { /** @param {!AmpElement} element */ @@ -570,7 +572,7 @@ export class AmpAnalytics extends AMP.BaseElement { user().assert(opt_predefinedConfig || property != 'iframePing', 'iframePing config is only available to vendor config.'); // Only deal with own properties. - if (from.hasOwnProperty(property)) { + if (hasOwn.call(from, property)) { if (isArray(from[property])) { if (!isArray(to[property])) { to[property] = []; diff --git a/extensions/amp-analytics/0.1/test/test-amp-analytics.js b/extensions/amp-analytics/0.1/test/test-amp-analytics.js index 74d82d07ade8..45b4f6b6357d 100644 --- a/extensions/amp-analytics/0.1/test/test-amp-analytics.js +++ b/extensions/amp-analytics/0.1/test/test-amp-analytics.js @@ -33,6 +33,7 @@ import {markElementScheduledForTesting} from '../../../../src/custom-element'; import {installCidService,} from '../../../../extensions/amp-analytics/0.1/cid-impl'; import {urlReplacementsForDoc} from '../../../../src/url-replacements'; +import {map} from '../../../../src/types'; import * as sinon from 'sinon'; import {AmpDocSingle} from '../../../../src/service/ampdoc-impl'; @@ -386,6 +387,8 @@ describe('amp-analytics', function() { return analytics.layoutCallback().then(() => { expect(analytics.mergeObjects_({}, {})).to.deep.equal({}); + expect(analytics.mergeObjects_(map({'a': 0}), map({'b': 1}))) + .to.deep.equal(map({'a': 0, 'b': 1})); expect(analytics.mergeObjects_({'foo': 1}, {'1': 1})) .to.deep.equal({'foo': 1, '1': 1}); expect(analytics.mergeObjects_({'1': 1}, {'bar': 'bar'}))