1

コンストラクター関数を使用して JS オブジェクトを定義する場合、すべてのオブジェクト プロパティで「this」を使用する必要を回避する方法はありますか? とても醜いようです。例えば

function Thingy(abc) {
  this.var1 = abc;
  this.var2 = this.var1 + " hello ";
  // etc
}

var myObj = new Thingy();

「var var2」を使用してから「this」を省略して「var2」を参照できるはずですが、何か不足していますか?

4

4 に答える 4

2

さて、あなたは言語がどのように設計されているかに遭遇しているのではないかと思います。

varしかし、コンストラクターからのプレーンステートメントを使用できるという意味があります。そこで作成された関数はすべて、次のプロパティを含むクロージャーにアクセスできます。

function Thingy(abc) {
    var var1 = abc;
    this.func1 = function(str) {return var1 + ", hello";};
}

var thing1 = new Thingy("Dan");
thing1.func1();  // => "Dan, hello"

これは、完全にプライベートな変数をオブジェクトにカプセル化する方法であるため、多くの場合、便利な手法であることに注意してください。

于 2013-02-07T14:06:35.263 に答える
2

好きなオブジェクトを使用returnして、最後に単純に使用できます。例:

function Thingy(abc) {
  var thingy = {};
  thingy.var1 = abc;
  thingy.var2 = thingy.var1 + " hello ";
  return thingy;
}

または

function Thingy(abc) {
  var thingy = {
    var1: abc,
    var2: abc + " hello "
  };
  return thingy;
}

または

function Thingy(abc) {
  return {
    var1: abc,
    var2: abc + " hello "
  };
}

または

function Thingy(abc) {
  var var1 = abc,
      var2 = var1;
  var2 += " hello ";
  return {
    var1: var1,
    var2: var2
  };
}
于 2013-02-07T14:00:35.320 に答える
1

いいえ、避ける方法はありません。thisオブジェクトに変数を割り当てるために使用する必要があります。

于 2013-02-07T13:57:15.583 に答える
-2

試す

function Thingy(abc) {
  with(this)
  {
    var1 = abc;
    var2 = this.var1 + " hello ";
  // etc
  }
}

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/with

于 2013-02-07T14:02:48.957 に答える