js 设计模式 oop 面向对象编程

最初我们写js代码的时候是这么写

    function checkName(){
        //验证姓名
    }

    function checkEmail(){
        //验证邮箱
    }

    function checkPassword(){
        //验证密码
    }

这种方式会造成全局变量的严重污染,再过渡到

 var checkObject = {

    checkName : function(){};
    checkEmail: function(){};
    checkPassword: funcion(){}; 

}

//也可如此写
var checkObject = {}  // || function(){}
checkObject.checkName = function(){};
checkObject.checkEmail = function(){};
checkObject.checkPassword = function(){};

//以上这两种写法不能复制一份,也就是说在new 方法创建新的对象的时候,新对象不能继承这些方法

以上是直接使用,而不是新建对象复制一份的,复制一份的话可以这么写

    var checkObject = function(){

        return {
            checkName:function(){},
            checkEmail:function(){},
            checkPassword:function(){}
        }
    }
//使用的时候 可以

var a = checkObject();
a.checkName();

这么写可以实现对象的复制 但是这不符合面向对象,新创建的类和checkObject 没有任何关系
于是我们可以采用构造函数的方式书写代码

    var checkObject  = function(){
        this.checkName = function(){}
        this.checkEmail = function(){}
        this.checkPassword = function(){}
    }
//像这样我们便可以用CheckObject 来创建新的对象了,通过new 来创建对象,创建出来的每个对象都会对this上的属性进行复制,但是这么做的话,每次都会有相对较大消耗,对于共有的方法,我们可以放在对象的原型上

var checkObject = function(){};
checkObject.prototype.checkName = function(){};
//...

//这样写要将prototype 书写很多遍 ,所以我们可以这么写,并实现链式调用,将this返回

var checkObject = function(){};
checkObject.prototype={
    checkName:function(){
        //验证姓名
        return this;
    },

    checkEmail:function(){
        //验证邮箱
        return this
    },

    checkPassword:function(){
        //验证密码
        return this;
    }   

}

// 这两种方式不可混用,否则后边会覆盖前边,此时我们调用只需

new checkObject().checkName().checkEmail().checkPassword();

下面再来介绍一下面向对象和面向过程两种编程方式 .page 10

多个function 书写的方式是一种面向过程书写代码的实现方式,添加了很多全局变量而且不利于别人复用,在别人使用时你也不可修改,我们可以改用面向对象方式来重写,我们把需求抽成一个对象,这个对象称之为类,面向对象一个重要特点就是封装,将属性和方法封装在一个对象中,就像将物品放在一个旅行箱中,这样不管是使用和管理我们都方便,(虽然有时候感觉直接拿在外边摆放也很方便,但是东西一多便不利于管理)

   var Book = (function () {
        //静态私有变量
        var bookNum = 0;
        //静态私有方法
        function checkBook() {
        }

        //返回构造函数
        return function (newId, newName, newPrice) {
            //私有变量
            var name, price;
            //私有方法
            function checkId(id) {
            }
            //特权方法
            this.getPrice = function () {
            };
            this.getName = function () {
            };
            this.setName = function (name) {
                this.name = name
            };
            this.setPrice = function () {
            };
            //公有属性
            this.id = newId;
            //公有方法
            this.copy = function () {
            };
            bookNum++;
            if (bookNum > 100)
                throw new Error(‘oop javascript‘);

            //构造器 实例化过程中被调用的方法
            this.setName(name);
            this.setPrice(price);

        }
    })();

    Book.prototype = {
        //静态公有属性
        isJSBook: false,
        //静态公有方法
        display: function () {
        }

    };
    //对比Java  别被js 起的这些名字弄混了  其实Js 就模仿了一个New 其他的跟Java基本一样 类 全局变量 方法 有自己的理解比较好 以前未想明白
    // java 为什么那么些

//为了看起来更像一个类 我们将原型上的方法 写到类里边


  var Book = (function () {
        //静态私有变量
        var bookNum = 0;
        //静态私有方法
        function checkBook() {
        }

        //返回构造函数
         function _Book(newId, newName, newPrice) {
            //私有变量
            var name, price;
            //私有方法
            function checkId(id) {
            }
            //特权方法
            this.getPrice = function () {
            };
            this.getName = function () {
            };
            this.setName = function (name) {
                this.name = name
            };
            this.setPrice = function () {
            };
            //公有属性
            this.id = newId;
            //公有方法
            this.copy = function () {
            };
            bookNum++;
            if (bookNum > 100)
                throw new Error(‘oop javascript‘);

            //构造器 实例化过程中被调用的方法
            this.setName(name);
            this.setPrice(price);

        }
        _Book.prototype = {
            //静态公有属性
            isJSBook: false,
            //静态公有方法
            display: function () {
            }

        };
        return _Book;
    })();

下面再介绍一种创建对象的安全模式

    //注意 执行new Book 方法之前 this.title 会先执行一次
   var Book = function (title) {
        if (this instanceof Book) {
            alert(1);
            this.title = title;
        }else{
            return new Book(title);
        }
    };

    var book = new Book(‘js‘);
    alert(book.title);
时间: 2024-10-20 10:12:28

js 设计模式 oop 面向对象编程的相关文章

微软C#6.0语言OOP面向对象编程》《微软ASP.NET\MVC56网站开发》《微软Web服务\WCF\Web API3.0课程视频》

最新<微软C#6.0语言OOP面向对象编程><微软ASP.NET\MVC56网站开发><微软Web服务\WCF\Web API3.0课程视频>下载 下载链接:http://pan.baidu.com/s/1bnjJQnd 密码:36ji 微软与开源实战训练营QQ群:  203822816微软MSDN俱乐部QQ群:  29754721,

简单理解OOP——面向对象编程

OOP:面向对象编程 一. 什么是OOP 面向对象编程:Object-oriented Programming,OOP,面向对象程序设计. 面向对象编程是一种计算机编程架构,他的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成. OOP使得程序更有重用性.灵活性和扩展性.OOP的核心思想是:封装.继承.多态(重点是类和对象). 不同于POP(面向过程编程)的以过程为中心的编程思想,面向对象编程的中心思想是通过调用对象来实现想要实现的目的. 面向对象的思想: 是一种更符合我们

javaScript设计模式之面向对象编程(object-oriented programming,OOP)(一)

面试的时候,总会被问到,你对javascript面向对象的理解? 面向对象编程(object-oriented programming,OOP)是一种程序设计范型.它讲对象作为程序的设计基本单元,讲程序和数据封装其中,以提高程序的重用性.灵活性和扩展性. 一.举个例子 有这么一个需求:做一个验证表单功能,仅需要验证用户名,邮箱,密码等 觉得在项目产品开发中,自己是这么写的 function checkName(){ //验证姓名 } function checkEmail(){ //验证邮箱 }

JavaScript 精粹 基础 进阶(8)OOP面向对象编程(上)

转载请注明出处 原文连接 http://blog.huanghanlian.com/article/5b698f14b8ea642ea9213f50 面向对象编程,oop并不是针对与javascript,很多语言都实现了oop这样一个编程发法论,比如说java,c++,都是实现了oop的语言. 概念与继承 概念 面向对象程序设计(Object-oriented programming OOP)是一种程序设计范型,同时也是一种程序开发的方法.对象指的是类的实例,它将对象作为程序的基本单元,将程序和

一百零六、SAP的OOP面向对象编程,OO-ALV的简介

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构. 基本概念: 1.对象(Object)是一个现实实体的抽象.一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的实体,这个程序产生该对象的动作或对它接受到的外界信号的反应.这些对象操作有时称为方法.对象是个动态的概念,其中的属性反映了对象当前的状态. 2.类(Class)用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.每个对象是类的

OOP面向对象编程的六大原则(上)

名词解释: OOA:面向对象分析 A:Analyze OOD:面向对象设计D:Design OOP:面向对象编程P:Program OOP六大原则(上):对象单一职责.里式替换原则.迪米特法则.开闭原则 对象单一职责:我们设计的对象必须职责明确,不能让他成为万能类,这里的对象可以是模块.类库,程序集,不单单指类. 1.特点:最常见的.比如分层:Model.业务层.UI层.把具有相同行为的类.放到一个模块,这个就是模块职责明确. 2.好处:每个类所包含的行为,属性都属于本身,后续的维护更具有针对性

javaScript设计模式之面向对象编程(object-oriented programming,OOP)--寄生组合式继承

组合式继承:将类式继承同构造函数继承组合使用,但是存在一个问题,子类不是父类的实例,而子类的原型式父类的实例,所以才有了寄生组合式继承. 意思就是说,寄生就是寄生式继承,寄生式继承就是依托于原型继承,原型继承又与类式继承差不多,所以另外一种继承模式应该是构造函数继承.当然子类不是父类的实例的问题是由于类式继承引起的. 说道这,我不得不说一下,道格拉斯大哥对寄生式继承的改造 function inheritPrototype(subClass,superClass){ //复制一份父类的原型副本保

Python 的OOP 面向对象编程基础

Objects Sorts of Program Languages Machine Orinted 机器指令 汇编语言 Procedure Orinted 按照步骤和分支处理 C Object Orinted 多人.多部门写作 C++ Java Python Python 中一切皆对象,面向对象做得非常彻底 对象是数据和操作的封装 对象是独立的,但对象之间可以互相作用 目前OOP是最接近人类认知的编程范式. OOP 描述数据--Property Action--Method class col

OOP 面向对象编程

面向对象 对象的概念是面向对象技术的核心.在现实世界里,我们面对的所有事物都是对象,如计算机.电视机.自行车等.在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象. 面向对象的三个主要特性: 对象的行为:可以对对象施加哪些操作:如电视机的开.关.转换频道等. 对象的状态:当施加那些方法时,对象如何响应:如电视机的外形.尺寸.颜色等: 对象的标识:如何区分具有相同行为与状态的不同对象. 基本概念: 对象,所谓数据封装就是将一组数据与这组数据有关操作组装在