我正在尝试将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);
});
}
将此属性绑定为调用A
或Sequence
的对象如何创建B
的新实例和仍然允许用户在函数内部定义?
Sequence
所以基本上我需要让用户仍然能够为cmd.call(e,new Sequence().bind(cmd)); //can not call bind from Constructor
定义参数本身,并将Sequence
绑定到调用它的对象。有什么建议?
修改
没有得到相同的结果所以我现在忽略了我的代码, 所以我用我的实际JavaScript编辑了bin。它现在正在做。
打开开发人员面板以阅读控制台。按this
然后按b,然后按ctrl+a
按a,不显示任何内容,按b,它正在运行ctrl+b
seq功能。
答案 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];
}
}