假设我有一个这样的变量:
var a = this.property || this.parent.anotherProperty;
a
可以在使用.call()
或.apply()
函数时设置上下文(通过上下文我的意思是“this”,也许“范围”是一个更好的词......) ?
编辑:
我有一个辅助函数,它给出了一个返回值:
- 如果值是一个函数 -> value()
- 如果它不是函数 -> 值
这是代码:
function unwrapValue(value){
return typeof value === 'function' ? value() : value;
}
unwrapValue 在一个普通对象(Utils)内,它是从这个对象外部调用的:
Utils.unwrapValue(value);
现在,我url
在函数中有一个属性(可能是函数或其他东西):
this.url = this.baseUrl || this.collection.baseUrl;
我不知道 this.url 是函数还是其他东西,所以我使用 unwrapValue 来获取 url 的值:
var params = {};
params.url = Utils.unwrapValue(this.url);
问题就在这里,unwrapValue 返回 this.url 但将 'this' 设置为其他东西(我认为它是 Utils 对象,但由于某种原因它是window
对象)所以params.url
这window.baseUrl || window.collection.baseUrl
不是我想要的。
如果value
是我这样解决的函数:
function unwrapValue(value, context){
if(typeof value === 'function'){
return typeof context === 'undefined' ? value() : value.call(context);
}else{
return value;
}
}
因此,如果将第二个参数context
传递给unwrapValue
,则 valuethis
将设置为context
。
带着这个问题,我正在寻找一种context
在这种情况下使用 aslo 的方法value
不是这样的功能:
this.url = this.baseUrl || this.collection.url;
只是为了澄清一点: this.baseUrl 和 this.collection.url 是简单的字符串
有办法解决吗?