使用新的构造函数将参数绑定在一起?

时间:2015-09-05 03:37:06

标签: javascript call bind

我正在尝试将this的参数绑定到名为Sequence的函数绑定有效,问题是多个Sequence相互覆盖,所以我必须使用{{ 1}}这是问题......

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"); }); }); 。从来没有第一个,因为它被写了。

序列功能

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); }); } 将此属性绑定为调用ASequence的对象如何创建B的新实例和仍然允许用户在函数内部定义?

Sequence

所以基本上我需要让用户仍然能够为cmd.call(e,new Sequence().bind(cmd)); //can not call bind from Constructor 定义参数本身,并将Sequence绑定到调用它的对象。有什么建议?

修改

http://jsbin.com/dulesejame

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

打开开发人员面板以阅读控制台。按this然后按b,然后按ctrl+a按a,不显示任何内容,按b,它正在运行ctrl+b seq功能。

2 个答案:

答案 0 :(得分:1)

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

在分配

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

答案 1 :(得分:0)

在意识到我做错了之后感谢代码jaff,我会接受他的答案,因为他确实给了我解决方法。除了使用Object.create之外,我只创建了一个新的Object文字。

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