javascript面向对象的几种设计模式详解

来源:程序思维浏览:1697次
javascript面向对象的设计模式有:工厂模式、构造函数模式、原型模式、混合的构造函数和原型模式,你们知道吗?还有一个神秘的第五种设计模式哦!

javascript面向对象的几种设计模式详解

下面让程序思维和大家分享一下吧:

第一种:工厂模式

代码:

function createCar() {
  var oTempCar = new Object;
  oTempCar.name = ”法拉利";
  oTempCar.color = “blue”;
  oTempCar.showColor = function() {
    alert(this.color);
  };
  return oTempCar;
}
var oCar1 = createCar();
var oCar2 = createCar();

工厂模式优点与缺点:

优点:解决了创建多个相似对象的问题可以实现重用性。

缺点:没有解决对象识别的问题 ,不知道我实例化了哪个对象,不像个对象,难以理解。

应用场景: 适用于只创建于一个类型的对象。

第二种:构造函数模式

function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.showColor = function() {
    alert(this.color);
  };
}

var oCar1 = new Car("red",4,23);
var oCar2 = new Car("blue",3,25);

构造函数方式的优缺点:

优点:解决了对象识别的问题,思路比较清晰。

缺点:构造函数虽然好用,但并非没有缺点。使用构造函数的主要问题,就是每个方法都要在每个实例上重新创建一遍,这样比较费性能。

应用场景:由于写法简单,思路清晰适合创建单应用对象实例。

第三种:原型模式

function Car() {
}

Car.prototype.color = "blue";
Car.prototype.doors = 4;
Car.prototype.mpg = 25;
Car.prototype.showColor = function() {
  alert(this.color);
};

var oCar1 = new Car();
var oCar2 = new Car();

原型模式优缺点:

优点:语义上,看起来所有属性都是同一个对象,增加了prototype方式添加属性和方法,让继承和重用更加清晰。

缺点:不能通过给构造函数传递参数来初始化属性的值,而且如果其中某个实例属性重新赋值,会导致其他的实例同一属性也会发生变化。

应用场景:适用于不同类型的对象。

第四种:混合的构造函数/原型方式

function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.drivers = new Array("Mike","John");
}

Car.prototype.showColor = function() {
  alert(this.color);
};

var oCar1 = new Car("red",4,23);
var oCar2 = new Car("blue",3,25);

oCar1.drivers.push("Bill");

alert(oCar1.drivers); //输出 "Mike,John,Bill"
alert(oCar2.drivers); //输出 "Mike,John"

混合的构造函数/原型方式优缺点:

优点:此种方式即符合语义又可以扩展新的属性和方法。

缺点:代码封装性不是很好。

应用场景:逻辑比较复杂的程序。

第五种:混合的JSON/构造函数/原型方式

function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.drivers = new Array("Mike","John");
}

Car.prototype={
     showColor :function() {
          alert(this.color);
     },
     showName:function(){
         alert(this.doors);
      }
}

var oCar1 = new Car("red",4,23);

alert(oCar1.drivers); //输出 "Mike,John,Bill"

混合的JSON/构造函数/原型方试的优缺点:

优点:此种方式即符合语义又可以扩展新的属性和方法,代码封装性好,易读简洁。

缺点:暂没发现。

应用场景:逻辑比较复杂的程序。
精品好课
React实战视频教程仿京东移动端电商
React是前端最火的框架之一,就业薪资很高,本课程教您如何快速学会React并应用到实战,对正在工作当中或打算学习React高薪就业的你来说,那么这门课程便是你手中的葵花宝典。
HTML5视频播放器video开发教程
适用人群1、有html基础2、有css基础3、有javascript基础课程概述手把手教你如何开发属于自己的HTML5视频播放器,利用mp4转成m3u8格式的视频,并在移动端和PC端进行播放支持m3u8直播格式,兼容...
HTML5基础入门视频教程易学必会
HTML5基础入门视频教程,教学思路清晰,简单易学必会。适合人群:创业者,只要会打字,对互联网编程感兴趣都可以学。课程概述:该课程主要讲解HTML(学习HTML5的必备基础语言)、CSS3、Javascript(学习...
jQuery视频教程从入门到精通
jquery视频教程从入门到精通,课程主要包含:jquery选择器、jquery事件、jquery文档操作、动画、Ajax、jquery插件的制作、jquery下拉无限加载插件的制作等等......
Vue2+Vue3+ES6+TS+Uni-app开发微信小程序从入门到实战视频教程
2021年最新Vue2+Vue3+ES6+TypeScript和uni-app开发微信小程序从入门到实战视频教程,本课程教你如何快速学会VUE和uni-app并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己...
最新完整React+VUE视频教程从入门到精,企业级实战项目
React和VUE是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React和VUE并应用到实战,教你如何解决内存泄漏,常用库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习Re...
最新完整React视频教程从入门到精通纯干货纯实战
React是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习React高薪就...
VUE2+VUE3视频教程从入门到精通(全网最全的Vue课程)
VUE是目前最火的前端框架之一,就业薪资很高,本课程教您如何快速学会VUE+ES6并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习VUE高薪就...
收藏
扫一扫关注我们