javascript - 使用新的构造函数绑定(bind)这样的参数?

标签 javascript call bind

我正在尝试将 this 的参数绑定(bind)到名为 Sequence 的函数,绑定(bind)有效,问题是多个 Sequence 覆盖了每个其他,所以我必须使用 new 这就是问题......

//js code
function init(cmd) {
    cmd.exec.call(e,Sequence.bind(cmd));
}

示例

init({
    exec:function(seq){
        seq("a",function(){
            console.log(this);// returns init object itself
        });
    }
});

效果很好,但是当我这样做时

//init for js above
...,function(seq) {
    seq("a",function(){
        console.log ("hello");
    },document.getElementById("google"));
});
...,function(seq) {
    seq("d",function(){
        console.log("goodbye");
    });
});

第二个序列运行再见。从来不是第一个,因为它正在被重写。

序列函数

function Sequence(key, fn, location) {
    if (!location) location = document;
    var self = this; //object that is bound to Sequence
    location.addEventListener("keydown", function sequenceMode(e) {
      if(self.waiting)
      {
        if (keyCodes.literal[key.toUpperCase()] === e.which) {
          fn.call(self,e);
          self.waiting = false;
          this.removeEventListener("keydown", sequenceMode);
        }
      } else location.removeEventListener("keydown", sequenceMode);
    });
}

所以我的问题是如何 A 将 this 属性绑定(bind)为调用 SequenceB 的对象,如何创建一个Sequence 的新实例并仍然允许用户在函数内部定义?

cmd.call(e,new Sequence().bind(cmd)); //can not call bind from Constructor

所以基本上我需要让用户仍然能够自己为 Sequence 定义参数,并将 this 绑定(bind)到调用它的对象。有什么建议么?

编辑

http://jsbin.com/dulesejame

没有得到相同的结果,所以我现在忽略了我的代码, 所以我用我的实际 JavaScript 编辑了 bin。现在它正在做。

打开开发者面板读取控制台。按 ctrl+a 然后按 b,然后按 ctrl+b 按 a,没有显示任何内容,因此按 b,它正在运行 ctrl+a seq 函数。

最佳答案

我可以告诉您的一个主要问题是使用相同的 default 对象,通过该对象,您的 commands.cmd[combinator] 将指向最后出现的同一对象。

在分配之前复制default

var def = Object.create(defaults);
for(var option in options)
{
  if(option !== "executed" && option !== "called")
  {
    def[option] = options[option];
  }
}

关于javascript - 使用新的构造函数绑定(bind)这样的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32409266/

相关文章:

java - 从 main 调用的数组

c - bind() 抛出错误 EINVAL,Linux 上的 UDP 服务器

networking - 无法绑定(bind)到 IPv6 地址

javascript - Backbone.Marionette 上下文中的事件绑定(bind)

javascript - JavaScript 中的 'click()' 是什么

jquery - 调用jquery插件的public方法

javascript - 如何在coffeeScript中翻译Promise.try

java - 如何在结束来电android时发出通知

javascript - Chrome 扩展程序无法通过 list 加载外部 JavaScript

javascript - 最后在 CRM 表单中加载 JavaScript 事件