如何在旧的,已弃用的和不推荐的方法之间进行适当的选择?

时间:2014-07-23 16:14:32

标签: javascript methods binding this deprecated

我正在处理一段创建AudioContext的代码补丁,然后想要创建WebAudio API。具体来说,它

function(...) {
  var AudioContext = AudioContext || webkitAudioContext;

  return {

    /* ... */

    init: function() {
      var self = this;

      this.ac = new AudioContext();
      /* createJavaScriptNode is deprecated, doesn't exist anymore in newer Chromium, */
      /* must use createScriptProcessor there. */
      this.anode = this.ac.createJavaScriptNode(this.bufferSize, this.inputChannels,
                                                 this.outputChannels);
      /* ... */
    },
    /* ... */
  };
  /* ... */
};

我们的想法是支持那些实现已弃用的API的浏览器,但不支持新的API。

AudioContextwebkitAudioContext之间选择不是问题所在,因为它们都是构造函数。

我知道我不能使用相同的成语在createJavaScriptNodecreateScriptProcessor之间进行选择,因为他们都是这两种方法。 如果没有太多代码膨胀,即如何创建另一个局部变量并使用bind()搞乱,我怎么能做到最好呢?

我在考虑:

this.anode = (this.ac.createJavaScriptNode || this.ac.createScriptProcessor)(this.bufferSize, this.inputChannels,
                                                     this.outputChannels);

我还没有尝试过,因为我担心这种调用方法的方式可能会失去上下文。 有什么想法或建议吗?

1 个答案:

答案 0 :(得分:0)

使用Chris Wilson的猴子补丁:https://github.com/cwilso/AudioContext-MonkeyPatch

这应该照顾大多数(所有?)案例。