0

知りたいのですが、JavaScriptで組み込みオブジェクトのカスタムフィールドに名前を付けて、標準フィールドとの衝突を回避する標準的な方法はありますか?

例えば:

var xhr = new XMLHttpRequest();
xhr.thisFieldIsNotGoingToBeUsed = 'by XHR internals but is used by the app';

thisたとえば、オブジェクトを各メンバーと比較するループを使用せずに、イベントでオブジェクトの親を逆引きする場合に便利です。

HTMLにはdata-属性がありますが、JavaScriptに相当するものが見つかりません。

4

1 に答える 1

2

経験則は、所有していないものを変更しないことです。代わりに、このアプローチを例として検討してください。

var myObj = {};
var xhr = new XMLHttpRequest();

myObj.xhr = xhr;
myObj.customProperty = 4;
myObj.customFunc = function () {
    // use this.xhr 
}

// Now pass myObj around instead, you have a reference to xhr (myObj.xhr)
// and your customProperty (myObj.customProperty).

JavaScript でクロージャーがどのように機能するかにより、関数を定義したときにスコープ内にあった変数にもアクセスできる必要があります。これにより、コンテキストonreadystatechangeの必要性が完全になくなります。this

var xhr = new XMLHttpRequest();
var something = function () {
    // I have access to "xhr" because of closures.
};

xhr.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
        // I still have access to "something" here because of closures;
    }
}

// xhr.open && send.

... 側にクロージャーがない場合でも (たとえば、onreadystatechangeが別のスコープで定義されている場合)、作業を行うために必要な変数を渡すことができるようにコードを変更することを検討する必要があります。

于 2013-02-16T12:30:20.580 に答える