使用函数的方法创建对象的javascript更好方法

时间:2019-03-20 14:59:14

标签: javascript function object methods

我是javascript新手,正在尝试创建一个对象,然后可以使用的实例填充列表。我拥有的这段代码有效,但是拥有“ this”感觉很多余。每行关键字。有没有更整洁/更合适的方式来创建这样的对象?

这是我当前的对象:

Usage

SENNA reads input sentences from the standard input 
and outputs tags into the standard output. 
The most likely command line usage for SENNA is therefore:

senna [options] < input.txt > output.txt

Of course you can run SENNA in an interactive mode 
without the "pipes" < and >.

Each input line is considered as a sentence. 
SENNA has its own tokenizer for separating words, 
which can be deactivated with the -usrtokens option.

非常感谢您的帮助

3 个答案:

答案 0 :(得分:1)

您可以使用Object.assign和对象文字:

var Particle = function(x, y) {
 Object.assign(this, {
   x, y,
   xspeed: 0,
   yspeed: 0,
   xacc: 0,
   yacc:0,
 });
 //...
};

由于您不使用继承,因此还可以返回一个新对象:

const Particle = (x, y) => ({
   x, y,
   xspeed: 0,
   yspeed: 0,
   xacc: 0,
   yacc:0,
   update() {
    this.x += this.xspeed;
    this.y += this.yspeed;
    this.xspeed += this.xacc;
    this.yspeed += this.yacc;
  },
});

答案 1 :(得分:1)

不幸的是,this在Javascript中是强制性的,即使其他语言也可以推论它。

今天Ecmascript classes are supported by any browser excepting IE。如果要使用面向对象的编程,这可能是使用类语法的好方法。

class Particle {
    constructor(x, y) {
      this.x = x;
      this.y = y;
      this.xspeed = 0;
      this.yspeed = 0;
      this.xacc = 0;
      this.yacc = 0;
    }

    update() {
        this.x += this.xspeed;
        this.y += this.yspeed;
        this.xspeed += this.xacc;
        this.yspeed += this.yacc;
    }
}

const particle = new Particle(1, 2);
particle.update();
console.log(particle);

答案 2 :(得分:0)

关于this的高使用率,您可以使用Object.assign来修复基本代码中对值分配的高使用率。 (this.value = value

由于您希望多个实例具有各自的值,因此将this范围用于要使用的值是合乎逻辑的。 (使用this范围中定义的值)