使用JavaScript Class语法时,默认情况下类是否将方法设置为原型?

时间:2018-04-14 05:24:02

标签: javascript

我正在学习原型继承,最近我了解到如果我使用工厂函数来创建所有具有方法的对象,这会导致使用不必要的内存量,并且通过在原型上设置方法,生成所有对象从工厂函数将在内存中共享相同的功能。构造函数也是如此。

话虽如此,当我使用类语法生成对象时,默认情况下method1method2方法显示在生成的对象的原型(__proto__)中。我希望必须像使用构造函数一样手动执行...

Test.prototype.get = somGetFunctionDefinedOutsideOfClass

为了将method1method2方法设置为原型。

这是否意味着如果我生成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()

1 个答案:

答案 0 :(得分:1)

是。类只是“功能对象”的语法糖。 ES6类方法自动设置为原型,这意味着它们与ES5函数声明对象的行为没有区别。