初了解JS设计模式,学习笔记

什么是设计模式。
  回答这个问题,往往我们得先知道我们为什么需要设计模式,正是因为有需求才会有设计模式,难道不是吗?

我们为什么需要设计模式。
  如果没有按照设计模式去写,你的代码很可能是乱无肆忌写的,也就是随心所欲,想怎么写就怎么写,反正只要出效果就行,好像是没啥问题,但好像又有问题,因为你根本就不知道这段代码在将来会发生什么问题,因此这段代码是不可预测的,另外一点你的代码废话可能会多一些,等等,如果用设计模式来写,往往可以解决这些问题。

那么究竟什么是设计模式。
  其实在‘我们为什么需要设计模式’这段话中已经提到了几点,如果从教学层面来说什么是设计模式的话,可以理解为设计模式就是一种经验,就是前人已经尝试过某些写法,他们知道怎么去写会好一些,怎么去写可能会出错。因此我们只需要按照他们的方式去写代码,就可以解决我们程序中的一些问题。

什么是多态。
  我们知道面向对象其中有一项就是多态,但网上很少有去讲JS多态的问题,主要原因就是JS天生就是多态的。
  如下: 

  var a = 10; 

      a = 'hello world';

  JS可以随意更改变量类型,主要原因就是JS是动态脚本语言,决定变量类型是在运行这段代码时决定的,而不像传统语言在编译的时候就决定了。
  

  再看下面一段代码:  

  function fn(name){
    alert(name);
     }
  fn('zhuimengzi');
  fn('追梦子');  


  根据传入的参数可以打印不同的值。
  多态指的就是同一操作,作用在不同对象上可以产生不同的结果。也想象成动态的,多态多态,不就是指多种形态。
  再如:

  

function Hello(why){
  why.sayHello();
}

var a = {sayHello:function(){alert('我是A')}};
var b = {sayHello:function(){alert('我是B')}};

Hello(a);
Hello(b);

  好像这没啥用吧?如果粗略的看好像是没啥,但细看,却是一种思想,我们来看

  

function Hello(why){
  why.sayHello();
}

var a = {sayHello:function(){alert('我是A')}};
var b = {sayHello:function(){alert('我是B')}};

Hello(a);
Hello(b);

  这段代码其实是有分工的,Hello这个函数它只做一件事就是让一个对象执行一个方法。并不在乎是哪个对象。多态的核心思想就是做什么,和谁去做是分开来的,再看“同一操作,作用在不同对象上可以产生不同的结果。”这句话,这里强调了同一操作,也就是操作同一个东西它可以产生多面性。也就是说Hello里面的代码必须有复用性。你不能说我传另外一个对象,你就不能用了。

鸭子类型。
  鸭子类型即,我不至于你是什么,比如我们经常看电影听到的,我不在乎你长得漂不漂亮,只要是个女的就行,等等这类。再如:我不管你怎么写,你给我提供一个接口就行。对应代码:

var json = {fn:function(){}};
if(json.fn&&(typeof json.fn)==='function'){
  alert('ok');
}


只要有json.fn这个方法就行,我不管你怎么写的,和我没关系。

原文地址:https://www.cnblogs.com/pssp/p/5784721.html