考虑以下示例:
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
会派上用场的吗?
答案 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
来实例化)。