@GivenCui
2016-05-25T12:23:06.000000Z
字数 6062
阅读 980
js高级
- 名片用数组存储管理
- 新建钱包实例
- 新建名片实例
- 新建三个方法: 增加、删除、显示
名片其实是一个数据模型
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>名片管理器(初级)</title><script type = "text/javascript">/*需求 : 名片管理器管理名片构造函数 : 名片Card、名片管理器CardManager名片属性 : 姓名、公司、电话、邮箱名片管理器属性 : 名片数组名片管理器方法 : 添加名片、显示所有名片信息、删除名片*/// 名片构造函数function Card (name, company ,phoneNum ,email) {this.name = name;this.company = company;this.phoneNum = phoneNum;this.email = email;}// 名片管理器构造函数function CardManager () {// 名片数组的属性,用来存储名片的this.cards = new Array(); // 实际创建了个Array对象}// 添加名片的方法CardManager.prototype.addCard = function (newCard) {// 把名片添加到管理器的名片数组里// 栈 "先进后出"this.cards.push(newCard); // 入栈的操作}// 显示所有名片信息的方法CardManager.prototype.showAllCardInfo = function () {// 通过循环遍历卡片数组得到每个卡片对象for(var i = 0; i<this.cards.length; i++){// 遍历每个卡片对象var tempCard = this.cards[i];// 格式化输出console.log(" \n 名字: " + tempCard.name +" \n 公司: " + tempCard.company + " \n 电话: " + tempCard.phoneNum + " \n 邮箱: " + tempCard.email)}}}///////////////////////////////////////////////////////////////自己封装的工具方法//////////////////////// 模仿indexOf()方法// 给数组Array加的方法,所以this指定是Array这个对象Array.prototype.myIndexOf = function (removeCard) {for(var i = 0; i < this.length; i++) {if(this[i] === removeCard) {return i;}}return -1; // 模拟indexOf()没找到返回-1}// 模拟其他面向对象语言的按照指定元素删除的方法Array.prototype.removeObj = function (removeObj) {var index = this.myIndexOf(removeObj);if(index > -1){this.splice(index, 1);return;}console.log("没有找到要删除的名片!");}// 删除名片的方法// (因为JS中没有按照指定元素的方法,所以我们要通过给数组构造函数的原型添加额外的方法)CardManager.prototype.removeCard = function (removeCard) {this.cards.removeObj(removeCard);}/////////////////////////////////////////////////////////// 创建名片管理器对象实例var cardManager = new CardManager();// 创建很多名片对象// 数字存成字符串避免 数字类型 的上下限问题var card1 = new Card("Mars" , "育知同创" , "18688889999" , "Mars@163.com");var card2 = new Card("刘强东" , "京东" , "136000555" , "liuqingdong@126.com");var card3 = new Card("乔布斯" , "苹果" , "1869466513" , "Qiaobusi@qq.com");// 添加名片// 数组是有序的,用push// *****任何数组都是有序的,可以重复的****cardManager.addCard(card1);cardManager.addCard(card2);cardManager.addCard(card3);// 显示所有名片信息cardManager.showAllCardInfo();// 删除card3cardManager.removeCard(card3);// 打印分隔符console.log("------------------------------------")// 显示所有的名片信息cardManager.showAllCardInfo();// 验证删除不存在的名片信息var card4 = new Card("abc", "ddd" ,"能看见我不");// 删除card4cardManager.removeCard(card4);// 打印分隔符console.log("------------------------------------")// 显示所有的名片信息cardManager.showAllCardInfo();</script></head><body></body></html>
书签是指浏览器中的书签,用面向对象思想实现
需求 : 查询、增加、删除、修改
构造函数 : 1. 数据模型 2. 管理器 3. 创建UI代码
拓展 : 表格的每一行是一个对象,例如购物车中的一行,用一个构造函数来实现
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>书签管理器</title><script type = "text/javascript">/*需求: 通过书签管理器来管理网页中的书签项.功能: 增、删、改、查构造函数 : 书签管理器BookManager 、书签Book书签的属性 : 网址url、标题title、星级star书签管理的属性 : 书签数组books书签管理器的方法 :1、添加书签 (要求不能重复添加标题或网址)2、显示所有的标签信息 (要求: 按照星级排序)【查有待完善】3、删除标签 (通过标题删除)4、修改标签 (通过标题去修改)*/// 书签构造函数 (属性:网址、标题、星级)function Book (url, title, star) {this.url = url; // 书签的网址属性 urlthis.title = title; // 书签的标题属性 titlethis.star = star; // 书签的星级属性 star}// 书签管理器构造函数 (属性 : 书签数组)function BookManager () {// 书签数组属性// 这是属性,同时也是一个数组对象实例(本质)this.books = new Array();}// 添加书签的方法// Prototype模式添加方法// newBook是一个对象BookManager.prototype.addBook = function (newBook) {// 遍历书签数组中的每个书签,目的是和新加的书签做判断for (var i = 0; i< this.books.length; i++) {// 得到每个书签对象var temBook = this.books[i];// 为了实现不能重复添加标题或网址的需求if (temBook.title === newBook.title || temBook.url === newBook.url) {console.log("网址已经存在");return; // 函数结束}}// this指向BookManager对象// 用 books属性 (同时也是数组)// 经过循环判断没有重复的才可以添加新标签this.books.push(newBook);};// 显示所有标签信息的方法 (要求 : 按照星级star排序)// 拓展: 传个参数实现升序排序和降序排序BookManager.prototype.showAllBookInfo = function () {// 冒泡排序星级从大到小for (var i = 0; i < this.books.length-1; i++) {for(var j=0;j<this.books.length-1-i; j++) {// 把位置为j和j+1的对象取出var tempBook1 = this.books[j];var tempBook2 = this.books[j+1];// 判断相邻两个对象的星级属性大小if (tempBook1.star >= tempBook2.star) {// 利用数组的splice()方法来实现两个位置替换this.books.splice(j,1,tempBook2);this.books.splice(j+1,1,tempBook1);}}// 格式化输出书签信息for (var i = 0; i < this.books.length; i++) {// 得到每一个书签对象var tempBook = this.books[i];// 格式化输出书签信息console.log(" \n 标题: " + tempBook.title + " \n 网址: " + tempBook.url + " \n 星级: " + tempBook.star);}}};// 给数组构造函数的原型添加方法 (从删除中抽离出来的)// 按指定的标题查找元素的下标,并返回Array.prototype.myIndexOf = function (removeTitle) {for (var i = 0; i < this.length; i++){// 得到数组里的每个元素var tempObj = this[i]; // this好强大//找到匹配项并返回下标if (tempObj.title === removeTitle){return i;}}return -1; // 没找到的时候返回-1,模拟indexOf()方法};// 给数组构造函数的原型添加方法(通过指定元素的标题删除)Array.prototype.removeObj = function (removeTitle) {var idx = this.myIndexOf(removeTitle);if (idx > -1) {this.splice(idx, 1);return;}console.log("没有找到该标题的书签! ");};// 删除书签// removeTitle是个字符串,这里传的不是对象BookManager.prototype.removeBook = function (removeTitle) {// 正常的方法/*for (var i = 0; i < this.books.length; i++) {if (this.books[i].title === removeTitle) {this.books.splice(i, 1);break;}}*/this.books.removeObj(removeTitle);};// 通过标题修改书签的所有属性 (这里只举例修改url)BookManager.prototype.modifyBookUrlByTitle = function (targetTitle,modifyUrl) {// 遍历书签数组,得到每一个书签对象for (var i = 0; i < this.books.length; i++) {// 得到每一个书签对象var tempBook = this.books[i];// 找到给定标题元素if (tempBook.title === targetTitle) {// 找到后,修改该书签的urltempBook.url = modifyUrl;return;}}console.log("没有匹配的书签可以修改");};/*****************以上构造函数相关**************************/// 创建一个书签管理器对象var bookManager = new BookManager();// 创建一堆书签对象var book1 = new Book("www.baidu.com", "百度", 2);var book2 = new Book("www.tencent.com", "腾讯", 3);var book3 = new Book("www.google.com", "谷歌", 5);var book4 = new Book("www.163.com", "网易", 4);var book5 = new Book("www.sina.com", "百度", 5); // 验证var book6 = new Book("www.baidu.com", "必读",1); // 验证// 添加书签 (完善成批量添加)bookManager.addBook(book1);bookManager.addBook(book2);bookManager.addBook(book3);bookManager.addBook(book4);bookManager.addBook(book5);bookManager.addBook(book6);// 显示所有书签信息bookManager.showAllBookInfo();// 删除腾讯书签bookManager.removeBook("腾讯");// 打印分隔符console.log("********************************");// 显示所有书签信息bookManager.showAllBookInfo();// 修改书签bookManager.modifyBookUrlByTitle("网易","www.1234.com");// 打印分隔符console.log("********************************");// 显示所有书签信息bookManager.showAllBookInfo();//修改书签(通过标题修改网址)bookManager.modifyBookUrlByTitle("网易2", "www.120.com");//打印分隔符console.log("===================");//显示所有书签信息bookManager.showAllBookInfo();</script></head><body></body></html>