JavaScript オブジェクト初期化子の表記法に関する質問があります。定義でインスタンスの名前を参照しているため、上の例が機能することに少し驚いています。2 つのアプローチは同一ですか? 私は通常、2 番目のアプローチを使用しましたが、同じことを達成しているようです。
var myObj =
{
Message:"Test",
someMethod:function(){
$.get("/someUrl",function(){
myObj.Message = "Returned Value";
})
}
}
var myObj =
{
Message:"Test",
someMethod:function(){
var that = this; //have to capture this in order to use it in a different context.
$.get("/someUrl",function(){
that.Message = "Returned Value";
})
}
}
this
さまざまなコンテキストで変更される可能性があるため、現在の意味を追跡する必要がないため、トップアプローチには利点があると思います。他に違いはありますか?
編集:トップアプローチが常に推奨されるアプローチではないことを理解してください。ただし、特定のケースではまだいくつかの利点があると思います。そのようなケースの 1 つが KnockoutJS で、バインディングの解析によってthis
、ビュー モデルのバインドされたクリック ハンドラーの意味が再定義されます。詳細はこちら:
http://www.appliness.com/10-things-to-know-about-knockout-js-on-day-one/ .
この場合、現在の意味の簿記を手動で行う必要がありますthis
私は通常、2番目のアプローチを使用しますが、違いとそれが機能する理由を完全に理解しようとしていました:-)。ただし、単一インスタンスのシナリオでのみ機能することを明確に理解してください。