有什么方法可以避免Javascript对象中的所有“this”?

时间:2013-02-07 13:55:15

标签: javascript object

使用构造函数定义JS对象时,有没有办法避免对每个对象属性使用“this”?这看起来很难看。 E.g。

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

var myObj = new Thingy();

似乎我应该可以使用“var var2”然后省略“this”并且只是引用“var2”,但我错过了什么?

4 个答案:

答案 0 :(得分: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
  };
}

答案 1 :(得分:2)

好吧,我担心你会遇到语言的设计方式。

但是有一种感觉,你可以使用构造函数中的普通var语句。在那里创建的任何函数都可以访问包含这些属性的闭包:

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

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

请注意,这是如何将完全私有变量封装在对象中的,因此它通常是一种有用的技术。

答案 2 :(得分:1)

不,没有办法避免它。您需要使用this为对象分配变量。

答案 3 :(得分:-2)

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

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