我正在学习原型继承,最近我了解到如果我使用工厂函数来创建所有具有方法的对象,这会导致使用不必要的内存量,并且通过在原型上设置方法,生成所有对象从工厂函数将在内存中共享相同的功能。构造函数也是如此。
话虽如此,当我使用类语法生成对象时,默认情况下method1
和method2
方法显示在生成的对象的原型(__proto__
)中。我希望必须像使用构造函数一样手动执行...
Test.prototype.get = somGetFunctionDefinedOutsideOfClass
为了将method1
和method2
方法设置为原型。
这是否意味着如果我生成100万个使用相同类的对象,它们的原型设置为相同的方法,我不必手动设置原型?
const Test = class TestClass {
constructor() {
this.variable = 'testVariable'
}
method1() {
console.log('method1')
}
method2() {
console.log('method2')
}
}
const obj = new Test()
console.log(obj)
obj.method1() // logs: method1
使用构造函数的示例,其中方法不在__proto__
const Test = function TestObjectGenerator() {
this.method1 = function() {
console.log('method1')
}
this.method2 = function() {
console.log('method2')
}
}
const obj = new Test()
console.log(obj)
obj.get()
答案 0 :(得分:1)
是。类只是“功能对象”的语法糖。 ES6类方法自动设置为原型,这意味着它们与ES5函数声明对象的行为没有区别。