Google 跟踪代码管理器使用什么模式来观察 de `dataLayer` 数组?

What is the pattern used by Google Tag Manager in order to observe de `dataLayer` Array?

我观察了 dataLayer 数组,但没有看到 push 有任何变化。实际上,根本没有自定义方法。 GTM 如何观察数组的变化?据我所知,对 Array 的更改不会引发任何事件,是吗?


编辑:

我做了一些更多的研究并找到了 Google 用于与 dataLayer 交互的库:https://github.com/google/data-layer-helper#listening-for-messages
我会看一下代码,如果我了解内部工作原理,甚至可能会回答我自己的问题。

GTM 使用的模式是 publish / subscriber

代码中的一些细节有助于识别它:https://github.com/google/data-layer-helper/blob/master/src/helper/helper.js

的第 76 和 181 行

最后是第 114 和 119 行

// Add listener for future state changes.
  var oldPush = dataLayer.push;
  var that = this;
  dataLayer.push = function() {
    var states = [].slice.call(arguments, 0);
    var result = oldPush.apply(dataLayer, states);
    that.processStates_(states);
    return result;
  };

查看 states 变量及其如何传递给 this.processStates_()