我正在试图弄清楚如何合并工厂函数闭包并同时使用Object.Assign/Object.Create继承.可能很简单,但我想不出该怎么做.首先,我构建了我想要的利用闭包的工厂.我有作用于我的私有变量的方法.
const projectFactory = function() {
let _title = "new project";
const _tabs = [];
const getTitle = function() {
return _title;
}
const setTitle = function(input) {
_title = input;
return;
}
const createTab = function() {
// some method that fills the tabs array
return;
}
return {
getTitle,
setTitle,
createTab
}
};
const factory1 = projectFactory();
console.log(factory1); // methods set on object, _title and _tabs not visible
说
当调用这个工厂函数时,我要创建的所有对象的所有方法都将是相同的.因此,我决定取出我的方法并将它们存储在一个要引用的对象中,然后使用Object.Assign/Object.Create重写我的工厂函数,以这种方式继承方法.
const projectMethods = {
getTitle() {
return this.title;
},
setTitle(input) {
this.title = input;
return;
},
createTab() {
// some method that fills the tabs array
return;
}
};
const projectFactory = function() {
let title = "new project";
const tabs = [];
return Object.assign(Object.create(projectMethods), {
title, tabs
});
};
const factory1 = projectFactory();
console.log(factory1); // methods available on prototype, title and tabs visible
但现在,因为我要在工厂中返回整个对象,所以我不再有私有变量.我如何才能达到这样的效果:
console.log(factory1); // methods available on prototype, title and tabs not visible