3

これまでに見たことのないスタイルで書かれた私の範囲外のコードを調査しています。次のプロパティバッグの内部の仕組みを理解しようとしています:

セッター:

props.Property(name) = val;

ゲッター:

val = props.Property(name);

セッターが上記のように機能するには、何をインスタンス化する必要がありますか?

編集: 単純化が少ないため、このコードはフレーム内の BrowserWindow で正常に実行されています (電話環境に似ています)。

var UI =
        {
            ready: function(oProps)
            {
                try
                {
                    if (oProps)
                    {
                        window.external.Property(UI.FrameWidth) = '1000';
                        window.external.Property(UI.FrameHeight) = '900';
                    }

                    window.external.Ready();
                }
                catch (e) { }
            }
    };

前もって感謝します、

4

3 に答える 3

8

奇妙な古いJScript構文に過ぎないのではないかと思います。コメントから「内部関数は参照を返す」という考えから離れて、JavaScript と JScript の違いに関する質問を見つけました。リストされている唯一の構文の違いは次のとおりです。

イディオム f(x) = y。これは、f[x] = y とほぼ同等です。

ただし、このイディオムについてはあまり見つけられません。ただし、Jscript.Netに関するこの本では、次のことについて簡単に言及しています

角かっこまたはかっこを使用して、すべての expando プロパティにアクセスできます。

expando」は、動的プロパティを追加できるクラスの修飾子のようです。

于 2013-09-17T00:49:44.663 に答える
1

このセッターのアプローチは機能しません。関数が何を返すかに関係なく、関数呼び出しを代入式の左辺 (LHS) のみとして使用すると、次のようになります。

ReferenceError: 代入の左辺が無効です

など。他の人が言ったように、ReferenceError例外はスローされているときにキャッチされ、それを処理するコードがないため、例外は表示されません。関数は第一級のオブジェクトですが、それらの呼び出しは有効な LHS 値ではありません 。ブロックに挿入すると、それがはっきりとわかります。console.log(e);catch

この getter アプローチは機能します。ただし、ゲッターとセッターが必要な場合は、遅くとも ECMAScript Edition 5 の適合実装でネイティブに使用できます

Object.defineProperty(props, "name", (function () {
  var _value;

  return {
    set: function (value) {
      /* setter code, simple example */
      _value = String(value);
    },

    get: function () {
      /* getter code, simple example */
      return _value;
    }
  };
}()));

/* triggers the setter */
props.name = 42;

/* triggers the getter */
var x = props.name;

/* "42" */
x

「編集 2」–</p>

var someObjs = [{a:"",someProp:"b"}];
(function (a) { return someObjs[a]})(0).someProp = "c";
console.log(someObjs[0].someProp);

– 関数の戻り値が LHS で使用されるため機能しますが、(ドット プロパティ アクセサー構文を使用して)プロパティ アクセスに評価される別の式の一部として使用されます。この関数は、プロパティにアクセスするオブジェクト(インスタンス) への参照を返します。プロパティ アクセスは割り当て式の LHS であり、RHS 値 ( ) がそのプロパティに割り当てられます。Object"c"

と機能的に同等です。

var someObjs = [
  {a: "", someProp: "b"}
];

(function () {
  return someObjs[0];
}()).someProp = "c";

console.log(someObjs[0].someProp);

したがって、

someObjs[0].someProp = "c";
console.log(someObjs[0].someProp);

(ご覧のとおり、優れたコード スタイルはコードの理解に大いに役立ちます)

于 2013-09-16T23:39:01.010 に答える