赞
踩
面向对象不是一门技术,而是一种解决问题的思维方式
面向对象的本质是对面向过程的一种封装
对象的本质是程序代码与现实世界沟通的一座桥梁。它有两种含义
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script> /*1.面向对象编程与面向过程编程并不是一门技术,而是一种解决问题的思路和方式 面向对象:注重的是结果 面向过程:注重的是过程 */ //举例:做饭 //1.1 面向过程:注重的是过程 //买菜 //洗菜 //切菜 //开火热锅 //放油 //把菜放到锅里炒 //放盐,醋,酱油 //把菜装到盘子里 //1.2 面向对象:注重的是结果 //不想自己做,找一个专业的对象来解决 //地沟油一条街的厨师们 /*是不是有了面向对象就不需要面向过程了呢?,不是,面向对象其实是对面向过程的一个封装 */ /*2.理解什么是对象*/ //2.1 对象是对单个实物的抽象 --------万物皆对象 /* 一台车: 特征:品牌 价格 颜色 轮子数量 行为:加速 刹车 一个人: 特征:姓名 身高 年龄 性别 行为:吃饭 睡觉 敲代码 一条狗: 特征:品种 颜色 性别 行为:拉屎 撒尿 打招呼 */ //2.2 对象是一个存储数据的容器 ------------键值对的形式存储数据 let student = { name:'张三', age:18, eat:function ( ) { console.log ( "大吉大利,今晚吃鸡" ); } } //2.3 如何寻找对象:名词提炼法 //小明在公交车上牵着一条叼着热狗的狗 </script> </body> </html>
本小节知识点:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ height: 50px; margin-top: 20px; background-color: greenyellow; } p{ height: 50px; margin-top: 20px; background-color: hotpink; } </style> </head> <body> <div></div> <div></div> <div></div> <p></p> <p></p> <p></p> <script> //需求:给三个div和p标签设置边框 //一:以前做法: 面向过程 //弊端:(1)获取元素代码过长 (2)两个for循环,代码冗余 (3)不便于维护 //1.获取页面元素 // let divList = document.getElementsByTagName('div'); // let pList = document.getElementsByTagName('p'); // //2.遍历数组每一个元素,设置边框 // for(let i = 0;i<divList.length;i++){ // divList[i].style.border = '10px solid red'; // } // for(let i = 0;i<pList.length;i++){ // pList[i].style.border = '10px solid red'; // } //二:使用函数封装 // //好处:代码复用 弊端:函数名是全局变量,会造成全局变量污染 // let divList = tagName('div'); // let pList = tagName('p'); // setStyle(divList,'10px solid red'); // setStyle(pList,'10px solid red'); // // // function tagName ( name ) { // return document.getElementsByTagName(name); // } // // function setStyle ( eles,value ) { // for(let i = 0;i<eles.length;i++){ // eles[i].style.border = value; // } // } //三:使用对象封装 //好处:(1)便于维护,以后添加修改方法很方便 (2)避免全局变量污染 let obj = { tagName:function ( name ) { return document.getElementsByTagName(name); }, setStyle:function ( eles,value ) { for(let i = 0;i<eles.length;i++){ eles[i].style.border = value; }; } }; let divList = obj.tagName('div'); let pList = obj.tagName('p'); obj.setStyle(divList,'10px solid red'); obj.setStyle(pList,'10px solid red'); </script> </body> </html>
本小节知识点
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ height: 50px; margin-top: 20px; background-color: greenyellow; } p{ height: 50px; margin-top: 20px; background-color: hotpink; } </style> </head> <body> <div></div> <div></div> <div></div> <p></p> <p></p> <p></p> <!--这是下个阶段要学习的第三方框架--> <script src="jquery-1.12.4.js"></script> <script> //需求:给三个div和p标签设置边框 $('div,p').css('border','10px solid green'); /*面向对象编程 以后开发中,如果要实现一个需求,先看有没有现成的专业的对象来解决这个需求,如果有就直接拿来用,没有就自己造一个专业的对象 别人造好的对象: 快捷方便,但是不好维护 自己造的对象: 好维护,但是耗费时间和精力 */ </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> <script> //声明数组 let arr = [10,20,30] /*1.数组的增删改查操作 新增元素到最后面 : arr.push( 元素 ) 新增元素到最前面 : arr.unshift() 删除最后一个元素 : arr.pop() 删除第一个元素 : arr.shift() 删除指定位置元素 : arr.splice(起始下标,删除数量) */ //2.将数组中的每一个元素都拼接成一个字符串 let str = arr.join()//10,20,30 console.log ( str ) //3.翻转数组 var newArr = arr.reverse() console.log ( newArr )//[100,20,10] //4.数组排序 let arr1 = [10,20,70,40,50,60] //数组排序方法的参数是一个回调函数:告诉数组内置对象你的排序规则 //从小到大排序 arr1.sort(function (a,b) { return a - b }); console.log ( arr1 )//从小到大 </script> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> <script> let str = "黑马颜值担当坤哥我爱你么么哒!"; //1 判断一个字符串在不在某个字符串里面 let index1 = str.indexOf("黑马")//如果存在,则返回参数字符串首字母所在的下标 let index2 = str.indexOf("坤") let index3 = str.indexOf("黑坤")//如果不存在,则返回 -1 console.log ( index1, index2, index3 )//0,6,-1 //2 截取字符串 第一个参数:从哪个下标开始截取 第二个参数:截取的长度 let str1 = str.substr(2,4)//颜值担当 console.log ( str1 ) //3 修改字符串 第一个参数:要修改的字符串 第二个参数:修改后的字符串 let str2 = str.replace("黑马","传智播客") console.log ( str2 )//传智播客颜值担当坤哥我爱你么么哒! //4 分隔字符串:将字符串按照指定的符号分隔,得到一个数组 let str3 = "我&爱&你" //这个函数的返回值一定是一个数组 let arry = str3.split("&")//以&符号分隔字符串 [我,爱,你] console.log ( arry )// [我,爱,你] //5 大小写转换 (只有英文才有大小写,中文不存在大小写) console.log ( "AKlkshflsLKJHDHL".toLowerCase () )//转为小写 aklkshflslkjhdhl console.log ( "AKlkshflsLKJHDHL".toUpperCase () )//转为大写 AKLKSHFLSLKJHDHL console.log ( "中文不存在大小写".toLowerCase () )//转为小写 </script> </html>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmhisuqN-1650269184916)(day01.assets/1000.gif)]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> </head> <body> <script> /* 1.面向对象 : 是一种注重结果的思维方式 面向对象思维 : 注重结果 面向过程思维 : 注重过程 2.面向对象 与 面向过程的关系 * 面向对象本质 : 对面向过程的一种封装 3.构造函数创建对象(new关键字四个工作流程) */ /*学习路线 1.介绍创建多个对象需求 2.介绍函数封装来创建多个对象 (工厂函数) 3.引入最终目标: 构造函数 */ //1.需求:创建3个人对象 (姓名name,年龄age,性别sex) //弊端:(1)代码冗余 (2)维护不便 // let person1 = { // name:'ikun', // age:32, // sex:'男' // } // let person2 = { // name:'班长', // age:38, // sex:'男' // } // let person3 = { // name:'王悦', // age:28, // sex:'男' // } //2.使用函数创建对象 : 解决创建多个对象代码冗余 //工厂函数 : function createPerson (name, age, sex) { //(1)创建空对象 let p = {} //(2)对象赋值 p.name = name p.age = age p.sex = sex //(3)返回创建好的对象 return p } let p1 = createPerson('ikun', 32, '男') let p2 = createPerson('班长', 38, '男') let p3 = createPerson('王悦', 28, '男') console.log(p1, p2, p3) </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> </head> <body> <script> /* 1.面向对象 : 是一种注重结果的思维方式 面向对象思维 : 注重结果 面向过程思维 : 注重过程 2.面向对象 与 面向过程的关系 * 面向对象本质 : 对面向过程的一种封装 3.构造函数创建对象(new关键字四个工作流程) 构造函数: 使用new关键字调用的函数 (1)创建空对象 (2)this指向这个对象 (3)对象赋值 (4)返回对象 */ /*学习路线 1.介绍创建多个对象需求 2.介绍函数封装来创建多个对象 (工厂函数) 3.引入最终目标: 构造函数 */ //2.使用函数创建对象 : 解决创建多个对象代码冗余 //工厂函数 : 创建对象 function createPerson (name, age, sex) { //(1)创建空对象 let p = {} //(2)对象赋值 p.name = name p.age = age p.sex = sex //(3)返回创建好的对象 return p } let p1 = createPerson('ikun', 32, '男') let p2 = createPerson('班长', 38, '男') let p3 = createPerson('王悦', 28, '男') console.log(p1, p2, p3) /*构造函数作用与工厂函数一致,都是创建对象。但是构造函数代码更加简洁 1.构造函数 : 使用new关键字调用一个函数 */ function Person (name, age, sex) { //(1)创建空对象 {} //(2)将this指向这个对象 this = {} //(3)对象赋值 this.name = name this.age = age this.sex = sex //(4)返回这个对象 return this } let person1 = new Person('ikun', 32, '男') let person2 = new Person('班长', 38, '男') let person3 = new Person('王悦', 28, '男') console.log(person1, person2, person3) /* 声明一个空函数 */ // function fn () {} // let res1 = fn() //普通函数 // let res2 = new fn() //构造函数 // console.log(res1, res2) </script> </body> </html>
构造函数名.prototype
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zEljVkmO-1650269184917)(day01.assets/1001.gif)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-36SLueMU-1650269184917)(day01.assets/1001.jpg)]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script> /* 1.学习目标 a. 原型 :每一个函数被创建的时候,系统都会自动创建与之对应的对象,称之为原型对象 b. 作用: 解决 构造函数 (1)内存资源浪费 (2)全局变量污染 c. 怎么用: (1)构造函数.prototype (2)实例化对象直接访问 2.学习路线 (1)复习js构造函数new的工作原理 (2)引出构造函数的弊端 : 浪费内存性能 (3)引出解决方案 : 函数 ->全局变量污染 (4)引出对象 -> 内存资源浪费 + 全局变量污染 (5)引出原型对象 */ //1.构造函数 : 调用一个函数使用了new关键字 // 构造函数中的方法 弊端 : 浪费内存资源 /*new关键字工作原理 //(1)创建空对象 {} //(2)this指向这个对象 this = {} //(3)执行赋值代码 //(4)返回这个对象 return this */ // function Person(name,age){ // //(1)创建空对象 {} // //(2)this指向这个对象 this = {} // //(3)执行赋值代码 // //(4)返回这个对象 return this // this.name = name; // this.age = age; // this.sayHi = function(){ // console.log('猴赛雷呀,我爱坤坤哟'); // } // }; // let p1 = new Person('班长',28); // console.log(p1); // p1.sayHi(); // let p2 = new Person('班花',18); // p2.sayHi(); // //每一个对象的方法都不是同一个 // console.log(p1.sayHi == p2.sayHi);//false //2. 使用全局函数 : 解决内存资源浪费问题 //弊端 : 全局变量污染的问题 // function fn(){ // console.log('猴赛雷呀,我爱坤坤哟'); // }; // function eat(){ // console.log('中午我要以面向对象的形式吃个饭'); // }; // function Person(name,age){ // //(1)创建空对象 {} // //(2)this指向这个对象 this = {} // //(3)执行赋值代码 // //(4)返回这个对象 return this // this.name = name; // this.age = age; // this.sayHi = fn; // this.eat = eat; // }; // let p1 = new Person('班长',28); // console.log(p1); // p1.sayHi(); // let p2 = new Person('班花',18); // p2.sayHi(); // console.log(p1.sayHi == p2.sayHi);//true //3.使用对象 解决 : (1)解决内存资源浪费 (2)全局变量污染 //弊端 : 对象自身还是全局的,造成新的全局变量污染 // let obj = { // fn:function(){ // console.log('猴赛雷呀,我爱坤坤哟'); // }, // eat:function(){ // console.log('中午我要以面向对象的形式吃个饭'); // } // } // function Person(name,age){ // //(1)创建空对象 {} // //(2)this指向这个对象 this = {} // //(3)执行赋值代码 // //(4)返回这个对象 return this // this.name = name; // this.age = age; // this.sayHi = obj.fn; // this.eat = obj.eat; // }; // let p1 = new Person('班长',28); // console.log(p1); // p1.sayHi(); // let p2 = new Person('班花',18); // p2.sayHi(); // console.log(p1.sayHi == p2.sayHi);//true /* 4.使用原型 : */ /* 4.1 原型 : 每一个构造函数在声明的时候,系统会自动的创建一个与之对应的对象, 称之为原型对象 */ function Person(name,age){ this.name = name; this.age = age; }; /*4.2 如何获取原型对象 每一个函数都有一个 prototype 属性,指向这个原型对象 */ console.log(Person.prototype); /* 4.3 既然原型是一个对象 : 用于存储数据 */ Person.prototype.sayHi = function(){ console.log('坤坤我爱你'); }; /* 4.4 谁可以访问 原型中的成员(属性+方法) a. 构造函数自身 : 构造函数名.prototype b. 这个构造函数所创建(实例化)的每一个对象 */ // 实例化对象 let p1 = new Person('班长',18); p1.sayHi(); //实例化对象 let p2 = new Person('班花',20); p2.sayHi(); console.log(p1.sayHi === p2.sayHi);//true </script> </body> </html>
本小节知识点:proto属性介绍
构造函数名.prototype
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SyxNkGsS-1650269184918)(day01.assets/1002.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-814qWPik-1650269184918)(day01.assets/1101.jpg)]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> </head> <body> <script> /* 1.prototype属性: 属于构造函数,指向原型对象 * 作用: 解决构造函数资源浪费+变量污染 2.__proto__属性: 属于实例对象,指向原型对象 * 作用: 可以让实例对象访问原型中的成员 */ //1.构造函数 function Person (name, age) { this.name = name this.age = age } //2.原型对象 Person.prototype.eat = function () { console.log('我中午真的吃了红烧武昌鱼') } Person.prototype.country = '中国人' //3.实例对象 let p1 = new Person('班长', 28) console.log(p1) /* __proto__ : 属于实例对象,指向原型对象 */ console.log( Person.prototype === p1.__proto__ )//true //实例对象为什么可以直接访问原型中的成员,其实都是通过__proto__来访问的 /* 1.虽然实例对象可以直接访问原型的原理是 __proto__,但是开发中不推荐使用 2.原因: __proto__不是ECMA标准语法,有一些浏览器不支持。 3.结论: 学习阶段,学习原型可以用__proto__. 实际开发中,建议省略__proto__ */ p1.eat()//p1.__proto__.eat() </script> </body> </html>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nEGhaqpn-1650269184918)(day01.assets/1301.jpg)]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> </head> <body> <script> /* 1. prototype : 属于构造函数,指向原型对象 * 作用:解决资源浪费+变量污染 2.__proto__ : 属于实例对象,指向原型对象 * 作用: 可以让实例对象访问原型中的成员 3.constructor: 属于原型对象,指向构造函数 * 作用: 可以让实例对象 知道自己被哪一个构造函数创建的 */ //1.构造函数 function Person (name, age) { this.name = name this.age = age } //2.原型对象 Person.prototype.type = '哺乳动物' Person.prototype.eat = function () { console.log('吃东西') } //3.实例对象 let p1 = new Person('布丁', 3) p1.eat() console.log(p1.type) /* constructor : 属于原型对象,指向构造函数 作用:可以让实例对象知道自己被那个构造函数创建的 */ console.log(Person.prototype.constructor)//Person console.log(Person.prototype.constructor === Person )//true console.log( p1.constructor )//Person p1.__proto__.constructor </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script> /* 构造函数也可以有自己的属性: 例如prototype 静态成员 : 属于函数对象的成员 实例成员: 属于实例化对象的成员 */ //构造函数 function Person(name,age){ this.name = name; this.age = age; }; Person.aaa = '啊啊啊'; console.log(Person.aaa);//静态成员 //实例化对象 let p1 = new Person('张三',20); console.log(p1.name);//实例成员 console.log(p1.age);//实例成员 </script> </body> </html>
{}
[]
function
属性名字符串
in 对象名
下标
in 数组名
数组名
.indexOf(元素
)delete
对象名.属性名
1.new关键字四个工作流程(必须记住)
2.构造函数、原型对象、实例对象三者关系(说的出来)
:string对象
* Boolean :boolean对象
* Number :number对象
属性名字符串
in 对象名
下标
in 数组名
数组名
.indexOf(元素
)delete
对象名.属性名
1.new关键字四个工作流程(必须记住)
2.构造函数、原型对象、实例对象三者关系(说的出来)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0kuxW1dS-1650269184919)(day01.assets/1588083693450.png)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。