zoukankan      html  css  js  c++  java
  • javascript设计模式与开发实践

    静态语言,动态语言(javascript)

    鸭子类型,实现一个原则:面向接口编程,而不是面向现实编程

    多态:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。换句话说:给不同对发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。

         多态背后的思想是将“做什么”和“谁去做以及怎么做”分离开,也就是将“不变的事物”和“可改变的事物”分离开来。消除类型之间的耦合关系。

    javascript是一门不必进行类型检查的动态类型语言。

    使用继承得到多态效果。继承通常包括实现继承和接口继承。

    javascript的多态,js的变量类型在运行期间是可变的。所以javascript对象的多态性是与生俱来的。

    多态最根本的作用就是通过把过程化的条件分支语句转换为对想的多态性,从而消除这些条件分支语句。

    将行为分布在各个对象中,并让这些对象各自负责自己的行为,这正是面向对象设计的优点。

    封装:在许多语言的对象系统中封装数据是由语法解析来实现的,这些语言也许提供了private、public、protected等关键字来提供不同的访问权限。但JavaScript并没有提供对这些关键字的支持,只能依赖变量的作用域来实现封装特性,而且只能模拟出public和private两种封装性。

    封装使得对象之间的耦合变得松散,对象之间只通过暴露的API接口来通信。拿迭代器来说,迭代器的作用是在不暴露一个聚合对象的内部表示的前提下,提供一种方式来顺序访问这个聚合对象。each函数就是。

    原型模式和基于原型继承的JavaScript对象系统。

    s使用克隆的原型模式:从设计模式的角度出发,原型模式是用于创建对象的一种模式,如果我们想要创建一个对象,一种方法是先指定它的类型,然后通过类来创建这个对象。原型模式选择了领一种方式,不在关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一摸一样的对象。

    Object.create()

    克隆是创建对象的手段:原型模式的真正目的并非在于需要得到一个一模一样的对象,而是提供了一种便捷的方式去创建某个类型的对象,克隆只是创建这个对象的过程和手段。

    在js这种类型模糊的语言中,创建对象非常容易,也不存在类型耦合的问题。js本身是基于原型的面向对象语言,它的对象系统就是使用原型模式搭建的,称为原型编程范型更合适。因为js中不存在类的概念,对象也并非从类中创建出来的,所有的js对象都是从某个对象上克隆来的。

    原型编程范型

    Oject是animal的原型,animal是dog的原型,他们之间形成一条原型链。当我们尝试调用dog对象的某个方法时,而它本身没有这个方法,那么dog对象会把这个请求委托给animal对象,如果animal也没有,则会顺着原型链到Object,这样一来便能得到继承的效果,看起来就像animal是dog的“父类”。。。。

    IO和JavaScript,基于原型链的委托机制就是原型继承的本质

    JavaScript中的原型继承(原型编程范型的一些规则:)

    1.所有的数据都是对象

    2要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它。(调用var obj1=new Object()或var obj2={},此时,引擎内部会从Object.prototype上克隆一个对象出来。还可以用new运算符从构造器中得到一个对象。

    function a(name){};

    a.prototype.getName=function(){};//实现原型继承

    var b=new a("seven")

    3对象会记住他的原型

    4如果对象无法响应某个事件,它会把这个请求委托给它自己的原型。

    js根对象Object.prototye是个空对象。js函数即可作为普通函数调用还可以作为构造器被调用。

  • 相关阅读:
    npm ERR! code EINTEGRITY npm! ERR! shal-
    Python 的类的下划线命名有什么不同?
    Linux下通过源码编译安装程序
    Mac OSX下Sublime Text配置使用Ctags实现代码跳转
    Python基础-*args和**kwargs魔法变量
    alpha版、beta版、rc版的意思
    英特尔第四代酷睿处理器数字和字母代表什么意思
    笔记本CPU低压和标压有什么区别?
    MySQL通过localhost无法连接数据库的解决
    sudo:无法解析主机 解决方案
  • 原文地址:https://www.cnblogs.com/theEndOfSummer/p/4565253.html
Copyright © 2011-2022 走看看