Google Tag Manager 使用什么模式来观察 de `dataLayer` 数组?

Bet*_*ega 2 javascript arrays key-value-observing observer-pattern google-tag-manager

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


编辑:

我做了一些更多的研究,发现谷歌的库与以下交互dataLayerhttps : //github.com/google/data-layer-helper#listening-for-messages
我会看看代码,甚至可能回答我自己的问我是否了解内部运作。

Krz*_*ski 5

GTM 使用的模式是发布/订阅者

有助于识别它的代码中的一些细节: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;
  };
Run Code Online (Sandbox Code Playgroud)

看看states变量以及它是如何传递给this.processStates_()