首先我们要知道:什么是模式?
模式,就是专门为某些常见问题开发的、优秀的解决方案。它通常经过一系列实践证明、针对某类问题具有可重用性的解决方案。 而设计模式,不同于编程模式,其与具体的语言无关。
// 使用函数来模拟一个Car类 function Car(model,year,miles) { this.model = model ; this.year = year; this.miles = miles; this.toString = function () { return this.model + "已经行驶了" + this.miles + "米"; } } //调用 var honda = new Car("东风Honda",2009,20000);//实例化Car //输出结果 console.log(honda.toString());
缺陷:
function Car(model,year,miles) { this.model = model ; this.year = year; this.miles = miles; //每个对象都有构造器原型的所有属性。 Car.prototype.toString = function() { return this.model + "已经行驶了" + this.miles + "米"; } } //调用 var honda = new Car("东风Honda",2009,20000);//实例化Car console.log(honda.toString());
优点:
模块能帮助我们清晰分离和组织项目中的代码单元。
在js中有几种实现模块的方法:
本篇中我们主要介绍“对象字面量”表示法。
示例:
<script type="text/javascript"> const myObjectLiteral = { varibaleKey : varibaleValue, function: function () { //实现 } }; </script>
注意 :
JS中,Module模式用于进一步模拟类的概念。它能够使一个单独的对象拥有公有、私有方法和变量,从而屏蔽来自 全局作用域的特殊部分。进而降低了与其他脚本冲突的可能性。
其中,私有部分,主要利用了“闭包”。由于闭包的存在,声明的变量和方法只能在该模式内部可用。但在返回对象上 定义的变量和方法,外部使用者是能够调用的。
一个关于购物车的例子:
<script type="text/javascript"> const basketModule = (function() { //私有 let baskey = []; function doSomethingPrivate () { //实现 } function doSomethingElsePrivate() { //实现 } //返回一个暴露出的公有对象API return { //添加item到购物车 addItem: function (values) { basket.push(values); }, //获取购物车里的item数 getItemCount: function() { return basket.length; }, //私有函数的公有形式别名 doSomething: doSomethingPrivate, //获取购物车里所有item的价格总值 getTotal: function() { let itemCount = this.getItemCount(), total = 0; while (itemCount--) { total += basket[itemCount].price; } return total; } } })(); //交互 basketModule.addItem({ item: "bread", price: 0.5 }); basketModule.addItem({ item: "酱油", price: 1.5 }); //输出结果 console.log(basketModule.getItemCount());//2 console.log(basketModule.getTotal());//0.5+1.5 = 2 //注意 console.log(basketModule.basket);//underfined。因为basket没有暴露在公有的API中 </script>
优点:
缺点: