gpt4 book ai didi

javascript - Javascript 中是否需要类?它们对创建对象有什么影响?

转载 作者:行者123 更新时间:2023-11-30 13:50:43 25 4
gpt4 key购买 nike

考虑这个示例代码:

class Test {
say() {
console.log("I'm a test.");
}
}

let TestFromClass = new Test();

let TestFromObject = {
say() {
console.log("I'm also a test.");
}
};


TestFromClass.say(); // Output: I'm a test.
TestFromObject.say(); // Output: I'm also a test.

我知道可以创建对象,例如 TestFromObject,而无需首先使用 class 关键字创建类。 class 有必要吗?这两种对象之间有区别吗?如果是这样,显式使用 class 有什么影响?

最佳答案

使用 new 创建一个新对象,其内部原型(prototype)是类的原型(prototype)。例如:

class Test {
say() {
console.log("I'm a test.");
}
}

let TestFromClass = new Test();
console.log(Object.getPrototypeOf(TestFromClass) === Test.prototype);

这对于创建多个对象很有用。这样做的通常原因是每个对象都可以具有某种关联的状态 - 通常是其属性的值。例如,一个 Person 对象可能有一个 name 和一个 age 属性。

但是,如果没有数据与实例相关联(如原始代码中的 TestFromClass),那么拥有实例就没有多大意义了。如果目的只是将命名函数收集到数据结构中,则 TestFromObject 方法更有意义。

就是说,有时希望有一个类具有与其相关联的一些函数(如 say),而这些函数与其数据实例没有任何关系,而仍然 能够创建一个实例——也许在原型(prototype)上使用其他方法。这并不少见,它是通过将非实例相关的函数设为 static 来完成的:

class Person {
static canEat() {
return ['apples', 'bananas', 'carrots'];
}
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const p = new Person('Bob', 99);
console.log(p.name);
console.log(Person.canEat());

关于javascript - Javascript 中是否需要类?它们对创建对象有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58300615/

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