Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
性能优化在;“工厂设计模式”;在JavaScript中_Javascript_Performance_Design Patterns_Factory Pattern - Fatal编程技术网

性能优化在;“工厂设计模式”;在JavaScript中

性能优化在;“工厂设计模式”;在JavaScript中,javascript,performance,design-patterns,factory-pattern,Javascript,Performance,Design Patterns,Factory Pattern,我想在我的应用程序中使用factory设计模式,并利用它的一些优点,如可读性、灵活性、可扩展性、封装性和“this”操作符的正确绑定“在开发过程中。由于我的应用程序在加载网页时生成html代码,因此在我的例子中,创建对象的性能和内存使用非常重要。请看下面的例子 //委托工厂设计 常量车=功能(颜色) { 常量CarPrototype=函数(颜色) { 常量carPrototype={}; carPrototype.color=颜色; //私人职能 函数内部() { 控制台日志(“内部”); /

我想在我的应用程序中使用factory设计模式,并利用它的一些优点,如可读性、灵活性、可扩展性、封装性和“this”操作符的正确绑定“在开发过程中。由于我的应用程序在加载网页时生成html代码,因此在我的例子中,创建对象的性能和内存使用非常重要。请看下面的例子

//委托工厂设计
常量车=功能(颜色)
{
常量CarPrototype=函数(颜色)
{
常量carPrototype={};
carPrototype.color=颜色;
//私人职能
函数内部()
{
控制台日志(“内部”);
// ...
}
//公共职能
carPrototype.gas=函数()
{
内部();
// ...
}
carPrototype.brake=函数()
{
// ...
}
返回carPrototype;
}
返回Object.create(CarPrototype(color));
}
//传统构造函数
常量车=功能(颜色)
{
这个颜色=颜色;
// ...
}
Car.prototype.internal=函数()
{
控制台日志(“内部”);
// ...
}
Car.prototype.gas=函数()
{
这个。内部();
// ...
}
Car.prototype.brake=功能()
{
// ...
}
函数myFunction()
{
const mazdaF=汽车(“红色”);
const mazdaT=新车(“红色”);
控制台日志(mazdaF,mazdaT);
}

JSPerf是一个很好的测试工具,所以我不能真正测试你的,但是。。。我想说,这更具可读性和可维护性,同时速度更快(使用ES6类):

const Car=(函数(){
常量内部=符号(“内部”);
班车{
构造器(颜色){
这个颜色=颜色;
}
[内部](){
控制台日志(“内部”);
// ...
}
气体(){
这[内部]();
// ...
}
break(){
// ...
}
}
返回车;
})();
出租汽车=新车(“红色”);
汽车。汽油();

控制台日志(car)汽车的刹车不同于刹车。如果你经常或大量地创建对象,那么创建对象的性能可能很重要。此外,如果您想了解性能差异,您应该创建一些HTML,对吗?最后,我不确定这是一个工厂模式,因为没有类型差异。但是工厂意味着很多东西。@Fuhrmanator你能解释为什么它不是工厂模式吗?工厂通常意味着一个函数,它使用创建逻辑实例化类的子类型。您的示例只是初始化。当然,在JavaScript中,函数是可以分配的,所以它可能不那么重要。谢谢你推荐的模式,但是很多专家说在JS中使用“类”是一种不好的做法,你应该避免它,因为它不是你所认为的经典继承中存在的类。我不喜欢使用这个模式,尽管它与构造函数模式几乎相同。在我看来,避免使用一个有用的工具,因为你认为你可能没有正确地理解它不是很专业。我宁愿正确地学习我的工具并按原样使用它们。ES6类绝对没有错,只要您知道它们不是Java类,并且知道它们的行为方式;虽然它们几乎只是围绕原型继承的语法糖,但它们更具可读性。但随你的便。