我正在尝试将 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)为调用 Sequence
或 B
的对象,如何创建一个Sequence
的新实例并仍然允许用户在函数内部定义?
cmd.call(e,new Sequence().bind(cmd)); //can not call bind from Constructor
所以基本上我需要让用户仍然能够自己为 Sequence
定义参数,并将 this
绑定(bind)到调用它的对象。有什么建议么?
编辑
没有得到相同的结果,所以我现在忽略了我的代码, 所以我用我的实际 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/