它是什么样的Javascript设计模式/方法
What kind of Javascript design pattern / approach is it?
看看代码,告诉我它是什么样的Javascript方法?
var Arithmetic = function(){
var obj = {
add: function(a,b) { return a + b; },
multiply: function(a,b) { return a * b; }
};
return obj;
}();
var resultAdd = Arithmetic.add(a,b);
var resultMul = Arithmetic.multiply(a,b);
为什么人们以这种方式编写js代码....以这种方式编写任何好处。
上面的代码与任何设计模式有关吗?如果是,请告诉我名字。
我总是这样写代码,很容易理解。
function add(a,b)
{
return a+b;
}
function multiply(a,b)
{
return a*b;
}
我只是这样称呼它
var x=add(2,3);
var y=multiply(5,8);
还要告诉我以我的方式编写代码的缺点是什么。
以自己的方式编写代码的缺点是将大量内容放在全局命名空间中。想象一下,当您添加定义处理数字的加法和乘法方法的代码,然后包含一个处理 Vector 的库时会发生什么,该库也定义了加法和乘法方法,但适用于向量。最后定义的方法将覆盖先前定义的方法,从而破坏一些依赖于它们的代码。
出于这个原因,最好不要污染全局范围,当您有希望提供的功能时,通过命名空间(Arithmetic.add()
而不是add()
)使其可用。
如果稍微分析一下代码,则var obj
不是在全局作用域中定义的,而是在匿名函数的作用域中定义的,因此它之外的代码可以使用变量的obj
名称而不会发生冲突。通过从匿名函数返回具有两个属性的对象,将功能(两种方法)导出到公共使用。由于不需要两个方法的多个实例,因此匿名函数会立即返回 (http://en.wikipedia.org/wiki/Immediately-invoked_function_expression)。
这种模式的另一个优点是它允许有私有变量:
var uniqueId = function() {
var id = 0;
return function() { return id++; }
}();
uniqueId(); // 0
uniqueId(); // 1
在上面的示例中,没有办法意外损坏 uniqueId 函数以给出错误(非唯一)结果,因为您只公开了所需的功能接口,而不是整个机制。
考虑您的风格中的等效项:
var id = 0;
function uniqueId() { return id++; };
uniqueId(); // 0
id = 0;
uniqueId(); // 0
您提供给我们的代码是面向对象代码的高级示例。我现在真的看不出这种封装obj
的优势,这只会让事情变得难以阅读。基本上Arithmetic
充当静态类。如果没有封装的obj
和自执行函数,它可以这样写:
var Arithmetic = {
add: function(a,b) { return a + b; },
multiply: function(a,b) { return a * b; }
}
您提供给我们的代码确实做了同样的事情 - 它只是没有直接写下该对象,而是使用自执行函数(即闭包,"没有名称的函数",在创建后立即调用(通过向其添加()
)创建它)。
OO代码的优点并不容易在几行中简化,但是将静态类视为方法的集合(就像这里所做的那样):它是封装。您可以将您创建的每个类/对象视为黑盒,而不必担心细节(当然,一旦它起作用)。
你的"传统"方法的优点是:一旦你得到了很多很多的功能,它就会被粘住,除非你在命名约定中包含thst(如math_add()
或math_mul()
),否则你无法轻易分辨它们属于哪个"组"。
- 用于操纵DOM API的Javascript设计模式
- 用于多个选项卡和模块化的knockoutjs设计模式
- 自动化设计模式c++
- jQuery自动完成标记新的标签设计模式
- 有没有一种方法可以在设计模式下将ng模型或工厂绑定到iframe
- Javascript MVVM 设计模式 - 如何跟踪脏状态以及谁应该做 Ajaxing
- 包含 2 个或更多对象的页面上的 JavaScript 设计模式
- 在 Node 中.js释放 zalgo 的设计模式为什么异步路径是一致的
- 在模式方法内部,“this”在猫鼬 4.4.12 中为空 {}
- 将变量传递给 Javascript 模块化模式方法
- Django设计模式-在加载时填充客户端JavaScript变量的方法
- Javascript策略设计模式问题
- 用于处理带有promise的外部接口中的参数的设计模式
- angularjs设计模式和从服务器获取数据的最佳实践
- 它是什么样的Javascript设计模式/方法
- node.js导出方法facade设计模式
- javascript设计模式-通过公共方法回调
- 从模块加载特定的方法.设计模式
- Javascript模块化设计模式——哪个更好:自调用函数,还是对象文字方法
- 用于从回调函数返回值的方法或设计模式