如何使用ES6类在Java Script中访问原型的属性?

时间:2018-08-20 02:17:33

标签: javascript node.js ecmascript-6

我一直在寻找答案,却从未找到答案。以为我会在这里发表我的问题。

在Java Script中,当我们像这样创建对象构造函数时:

function Car(speed){
  this.speed = speed;
  this.position = 0;
}

Car.prototype.move = function(){
  this.position++
}

然后我们可以像这样访问原型的属性:

console.log(Car.prototype)
// will output: Car { move: [Function] }

但是当我们这样声明Car构造函数时(使用ES6类)

class Car{
  constructor(speed) {
   this.speed = speed;
   this.position = 0;
  }

  move(){
    this.position++:
  }
}

然后奇怪的是,当我们这样做时,我们得到了一个空对象:

console.log(Car.prototype)
// will output: Car { }

据我了解,在构造函数方法之外的ES6类中声明的所有属性都分配给对象的原型。那么为什么我们不能使用console.log(Car.prototype)访问原型的属性?

我也知道它是原型的一部分,因为当我这样做时,它会起作用:

console.log(Object.getOwnPropertyNames(Car.prototype));
// output [ 'constructor', 'move' ]

所以我知道move方法已分配给原型。

我只是想知道为什么不能像在函数中而不是ES6类中声明构造函数时那样使用Objet.prototype访问这些属性?

我错过了什么吗,这是一个错误吗?

我正在使用Node.js,如果此信息可能有用的话

1 个答案:

答案 0 :(得分:3)

使用ES6类声明时,它确实将方法放在原型上,但是它们可能无法枚举,因此常规枚举(如console.log(Car.prototype)不会显示它们。

您可以使用console.log(Object.getOwnPropertyNames(Car.prototype))或其他类似的Object方法查看其中的所有内容。