使用两种不同的上下文调用Javascript函数
假设我在使用两种不同的上下文调用Javascript函数,javascript,jquery,Javascript,Jquery,假设我在命名空间中有一个函数,比如: app.MyNamespace = { defaults: { myOption: 1 }, myFunction(param1, param2, options){ options = $.extend(options, this.defaults); } } 然后,如果我在其他上下文(例如,窗口)中使用 显然,选项没有扩展默认值,因为它失去了正确的上下文 如何在函数中保留默认值,但在另一
命名空间中有一个函数
,比如:
app.MyNamespace = {
defaults: {
myOption: 1
},
myFunction(param1, param2, options){
options = $.extend(options, this.defaults);
}
}
然后,如果我在其他上下文(例如,窗口
)中使用
显然,选项
没有扩展默认值
,因为它失去了正确的上下文
如何在函数中保留默认值
,但在另一个上下文中调用它
只需将其指向默认值
app.MyNamespace = {
defaults: {
myOption: 1
},
myFunction(param1, param2, options){
options = $.extend(options, app.MyNamespace.defaults);
}
}
如果我得到了你想要的,这应该是:
app.MyNamespace = {
defaults: {
myOption: 1
},
myFunction:function(param1, param2, options, scope){
options = $.extend(options, this.defaults);
}}; app.MyNamespace.myFunction('param1','param2', {option1:1,option2:2}, this);
app.MyNamespace.myFunction.call(this)
为什么这样称呼它?因为它可以被不同的类使用,你可以在你的myFunction
中使用它,你可以添加.bind(这个)代码>也许你没有明白我的意思:)哦,好的。。所以你想改变上下文。我认为问题在于维护上下文。
app.MyNamespace = {
defaults: {
myOption: 1
},
myFunction:function(param1, param2, options, scope){
options = $.extend(options, this.defaults);
}}; app.MyNamespace.myFunction('param1','param2', {option1:1,option2:2}, this);