次のような変数があるとします。
var a = this.property || this.parent.anotherProperty;
コンテキストを設定することは可能です (コンテキストとは、「これ」を意味します。おそらく「スコープ」の方が適切な言葉です...)関数を使用する場合や関数a
を使用する場合のように?.call()
.apply()
編集:
値を返すヘルパー関数があります。
- 値が関数の場合 -> 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;
}
}
に 2 番目のパラメータcontext
が渡されるとunwrapValue
、値this
が に設定されcontext
ます。
この質問では、次のような関数ではなかったcontext
場合に同様に使用する方法を探していました。value
this.url = this.baseUrl || this.collection.url;
もう少し明確にするために: this.baseUrl と this.collection.url は単純な文字列です。
それを解決する方法はありますか?