Javascript 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);
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
单例设计模式 设计模式:对问题行之有效的解决方式,其实,它是一种思想。 单例设计模式解决的问题:就是可以保证一个类在内存中的对象唯一性。 比如多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。 如何保证对象唯一性呢? 不允许其他程序用new创建该类对象。 在该类创建一个本类实例。 对外提供一个方法让其他程序可以获取该对象。 步骤: 私有化该类构造函数。 通过new在本类中创建一个本类对象
状态模式(state pattern)是一个面向对象设计模式。该模式的关键在于一个值有某些内部状态,体现为一系列的 状态对象,同时值的行为随着其内部状态而改变。状态对象共享功能 —— 当然,在 Rust 中使用结构体和 trait 而不是对象和继承。每一个状态对象代表负责其自身的行为和当需要改变为另一个状态时的规则的状态。持有任何一个这种状态对象的值对于不同状态的行为以及何时状态转移毫不知情。 使
目录表 简介 self 类 创建一个类 对象的方法 使用对象的方法 __init__方法 使用__init__方法 类与对象的变量 使用类与对象的变量 继承 使用继承 概括 简介 到目前为止,在我们的程序中,我们都是根据操作数据的函数或语句块来设计程序的。这被称为 面向过程的 编程。还有一种把数据和功能结合起来,用称为对象的东西包裹起来组织程序的方法。这种方法称为 面向对象的 编程理念。在大多数时
主要内容:什么是 GOF(四人帮,全拼 Gang of Four)?,设计模式的使用,设计模式的类型,设计模式的六大原则设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,
在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。 设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。 面向对象设计模式通常以类或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定