首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用ES6类访问Java脚本中的原型属性?

如何用ES6类访问Java脚本中的原型属性?
EN

Stack Overflow用户
提问于 2018-08-20 02:17:32
回答 1查看 113关注 0票数 0

我已经找了一段时间了,但一直没有找到答案。我想把我的问题发到这里。

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

代码语言:javascript
复制
function Car(speed){
  this.speed = speed;
  this.position = 0;
}

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

然后我们可以访问原型的属性,如下所示:

代码语言:javascript
复制
console.log(Car.prototype)
// will output: Car { move: [Function] }

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

代码语言:javascript
复制
class Car{
  constructor(speed) {
   this.speed = speed;
   this.position = 0;
  }

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

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

代码语言:javascript
复制
console.log(Car.prototype)
// will output: Car { }

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

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

代码语言:javascript
复制
console.log(Object.getOwnPropertyNames(Car.prototype));
// output [ 'constructor', 'move' ]

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

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

我是不是漏掉了什么,这是个虫子吗?

我在Node.js工作,如果这些信息有用的话

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-20 02:59:39

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

您可以使用console.log(Object.getOwnPropertyNames(Car.prototype))或其他类似的对象方法来查看那里的所有内容,这些方法将向您展示所有存在的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51923397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档