在es6中是否可以实例化一个类并定义类似于经典构造函数的原型属性?

时间:2016-11-21 23:29:43

标签: javascript ecmascript-6

在ES6中创建具有原型属性的类时,如何在类的实例化(baz)上设置这些道具biznew

class Foo {}

Foo.prototype.baz = 1;
Foo.prototype.biz = 'wow';

var thing = new Foo() // How to also set prototype values of .baz & .biz on creation?



class Baz {

  constructor(biz) {
   this.biz = biz
  }
}

var baz = new Baz(); // will not put properties on the prototype.

2 个答案:

答案 0 :(得分:2)

class Baz {
  constructor(biz) {
    Object.getPrototypeOf(this).biz = biz
    // or
    // this.constructor.prototype.biz = biz
  }
}

const baz1 = new Baz(1); // baz1.biz === 1
const baz2 = new Baz(2); // baz2.biz === 2
baz1.biz === baz2.biz; // === 2

在任何合理的情况下,这都不是人们想做的事情。

答案 1 :(得分:1)

是的,您可以像这样设置原型属性,就像我们没有使用changed ('value', 1) 语法一样。

  

如何在创建时设置原型值?

你做不到。原型与实例化无关。如果您想要实例属性,请将它们放在构造函数中,但它们不再是原型属性。如果你想要继承的属性,把它们放在原型上,但它们在所有实例之间共享,而不是用每个对象创建。