gpt4 book ai didi

javascript - 如何使用 ES6 类访问 Javascript 中的原型(prototype)属性?

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:33 25 4
gpt4 key购买 nike

我一直在寻找答案,但从未找到。我想我应该在这里发布我的问题。

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

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

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

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

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 类中声明的所有属性都分配在对象的原型(prototype)上。那么为什么我们不能使用 console.log(Car.prototype) 访问原型(prototype)的属性呢?

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

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

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

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

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

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

最佳答案

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

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

关于javascript - 如何使用 ES6 类访问 Javascript 中的原型(prototype)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51923397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com