考虑这个示例代码:
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/