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

您可以使用任何您喜欢的对象,并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 回答
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 回答
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 回答