扩展自我容器功能Javascript

时间:2016-05-09 17:54:23

标签: javascript ecmascript-6

考虑以下示例:

var FunctionName = () => {
  return {
    helloWorld() { console.log("hello world"); }
  }
};

var OtherFunctionName = () => {
  return {
    goodBye() { console.log("Bye Bye"); }
  }
};

假设我在上面没有做出语法错误的事情,我如何在FunctionName中扩展OtherFunctionName以便OtherFunctionName可以访问helloWorld ??

因为代码库可能包含ES6类,是否可以使用相同的方法将所述类扩展为自包含函数以访问类方法?

所以:

var FunctionName = () => {
  return {
    helloWorld() { console.log("hello world"); }
  }
};

class OtherClass {
  goodBye() { console.log("Bye Bye"); }
};

在这种情况下,FunctionName会扩展OtherClass以访问goodBye可能吗

在自包含函数上扩展自包含函数的方法有哪些。

在自包含函数上扩展类的方法有哪些

这是Object.assign或lodashes ._extend会派上用场的吗?

2 个答案:

答案 0 :(得分:1)

如果您想使用原型,可以使用Object.create。 它允许您使用特定原型创建对象。 因为您不想将所有内容更改为“属性描述符”,所以可以将其与Object.assign结合使用:

var FunctionName = () => {
  return Object.assign(Object.create(OtherClass.prototype), {
    helloWorld() { console.log("hello world"); }
  })
};

如果您想支持工厂功能和类,可以这样做:

var FunctionName = () => {
  return Object.assign(
    OtherClass.prototype ? Object.create(OtherClass.prototype) : OtherClass(), {
    helloWorld() { console.log("hello world"); }
  })
};

答案 1 :(得分:1)

您可以简单地实例化它:

function FunctionName() {
  return {
    helloWorld() { console.log("hello world"); }
  }
}

function OtherFunctionName() {
  var x = FunctionName();
  // you now have access to x.helloWorld in here
  return {
    goodBye() {
      x.helloWorld();
      console.log("Bye Bye");
    }
  }
}

FunctionName是构造函数而不是工厂函数时,这应该是相同的(只需使用new来实例化)。