我有一些JS代码,并希望将其打包以便易于使用。 我有这个:
var myID = {
windowref : undefined,
intervalID : null,
checkLogin : function(){
if (this.windowref==undefined){
console.log(windowref)
console.log("no ref yet")
return false;
}
if (this.windowref.closed){
console.log("window closed")
clearInterval(this.intervalID)
this.intervalID=null
}
if (this.windowref.location.href=='mycallbackurl'){
console.log("login detected")
clearInterval(this.intervalID)
this.intervalID=null
this.windowref.close()
}
},
login_process: function(){
this.windowref = window.open('oneURL',
"login with MY ID","width=600, height=400")
console.log(self)
if (this.windowref!=null){
this.intervalID = setInterval(this.checkLogin,500)
}
}
}
当我试图像这样使用它时:
$(document).ready(function(){
$('a#login_push').on("click",myID.login_process.bind(myID));
});
我遇到了这个'这个'不在适当的范围内(范围限定为jquery返回的元素。 我改成了:
var myID = {
windowref : undefined,
intervalID : null,
checkLogin : function(){
if (this.windowref==undefined){
return false;
}
if (this.windowref.closed){
console.log("window closed")
clearInterval(this.intervalID)
this.intervalID=null
}
if (this.windowref.location.href=='mycallbackurl'){
console.log("login detected")
clearInterval(this.intervalID)
this.intervalID=null
this.windowref.close()
}
},
login_process: function(){
this.windowref = window.open('myloginurl',
"login with my ID","width=600, height=400")
if (this.windowref!=null){
this.intervalID = setInterval(this.checkLogin.bind(myID),500)
}
}
}
如果我在设置事件处理程序时也绑定,则此方法有效:
$(document).ready(function(){
$('a#login_push').on("click",myID.login_process.bind(myID));
});
是否有适当的"写这个的方式,这样我就可以将它打包成一种" SDK"并且开发人员只需要做某种事情:
$(document).ready(function(){
$('a#login_push').on("click",myID.login_process);
});
我尝试在对象文字中将self设置为this,然后使用self而不是this,但它不起作用。
答案 0 :(得分:1)
如评论中所述,您可以使用myID
代替this
。另一种方法是导出函数的绑定版本:
myID.login_process = function () {
// ...
}.bind(myID);