0

と呼ばれるカスタマイズされたプロパティを定義しようとしていますuserdataが、location.hash のようなオブジェクトでは機能しませんfalse, false。2 つのアラート呼び出しで取得しました。

        Object.defineProperty(Object.prototype, "userdata", {
            value: false,
            writable: true,
            enumerable: true,
            configurable: true
        });

        alert (location.hash.userdata);
        location.hash.userdata = true;
        alert (location.hash.userdata);

不変ですか?

独自のオブジェクトを定義すると、つまり

var a = {};
a.userdata = true;

正しく設定されますが、前の例が機能しない理由がわかりませんでした

4

1 に答える 1

1

のデフォルト値は であるため、最初のアラートで false が返されるのは正常userdataですfalse

ただし、ドット表記を使用してプリミティブ文字列をオブジェクトとして扱うと、プリミティブ値がプリミティブ ラッパーでラップされ、そのラッパー オブジェクトが後で破棄されるlocation.hash.userdata = true;ため、確実に機能しません。location.hashStringnew String(location.hash).userdata = true;

できないため、常に不変であるlocation.hash = new String(location.hash)ため、プロパティを別のオブジェクトに保存する必要があります。location.hash

于 2013-04-09T02:26:34.487 に答える