我一直在寻找答案,却从未找到答案。以为我会在这里发表我的问题。
在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,如果此信息可能有用的话
答案 0 :(得分:3)
使用ES6类声明时,它确实将方法放在原型上,但是它们可能无法枚举,因此常规枚举(如console.log(Car.prototype)
不会显示它们。
您可以使用console.log(Object.getOwnPropertyNames(Car.prototype))
或其他类似的Object方法查看其中的所有内容。