我已经找了一段时间了,但一直没有找到答案。我想把我的问题发到这里。
在Java脚本中,当我们创建像这样的对象构造函数时:
function Car(speed){
this.speed = speed;
this.position = 0;
}
Car.prototype.move = function(){
this.position++
}然后我们可以访问原型的属性,如下所示:
console.log(Car.prototype)
// will output: Car { move: [Function] }但是,当我们像这样声明汽车构造函数时(使用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方法是分配给原型的。
我只是想知道为什么我们不能使用Objet.prototype来访问这些属性,就像在函数中而不是在ES6类中声明构造函数一样?
我是不是漏掉了什么,这是个虫子吗?
我在Node.js工作,如果这些信息有用的话
发布于 2018-08-20 02:59:39
当您使用ES6类声明时,它确实会将这些方法放在原型上,但是它们可能是不可枚举的,因此像console.log(Car.prototype)这样的常规枚举不会显示它们。
您可以使用console.log(Object.getOwnPropertyNames(Car.prototype))或其他类似的对象方法来查看那里的所有内容,这些方法将向您展示所有存在的内容。
https://stackoverflow.com/questions/51923397
复制相似问题