js设计模式--鸭子类型
1.简介
JavaScript没有提供传统面向对象语言的类式继承
通过原型委托的形式实现对象与对象之间的继承
没有对抽象类和接口的支持
编程语言按数据类型可分为静态类型语言和动态类型语言
变量的类型要到程序运行的时候, 待变量被赋予值之后,才会具有某种类型。
代码数量更少, 理简洁,专注业务逻辑
缺点:无法保证数据的类型
在JavaScript中,我们对一个变量赋值时,不需要考虑它的类型。动态类型语言对yojgod型的宽容为JavaScript带来了很大的灵活性。
2.duck typing
鸭子类型(duck typing)如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子。
只关注对象的行为,不关注对象本身面向接口编型 ,而不是面向实现编程,是设计模式中最重要的思想。代码演示:
var duck = { duckSinging:function(){ console.log('呱呱呱'); } } alert('duck'); var chicken = { duckSinging:function(){ console.log('呱呱呱'); } } alert('chicken'); var chior = []; var joinChior = function(animal){ if (animal && typeof animal.duckSinging === 'function') { //typeof就是判断参数是什么类型的实例 chior.push(animal); console.log('恭喜你加入合唱团'); console.log('当前已募集'+chior.length+'只鸭子'); } } joinChior(duck); joinChior(duck); joinChior(chicken);
3.复数形态
同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。
给不同的对象发送同样的消息的时候, 这些对象会根据这个消息分别给出不同的反映。(闺蜜短信群发)