1. 面向对象编程
1.理解什么是面向对象编程
面向对象不是一门技术,而是一种解决问题的思维方式 面向对象的本质是对面向过程的一种封装
2.理解什么是对象
对象的本质是程序代码与现实世界沟通的一座桥梁。它有两种含义
- 对象:是一种数据类型(存储数据的容器),以键值对的形式存储数据
- 对象:对现实世界实物的一种抽象。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
let student = {
name:'张三',
age:18,
eat:function ( ) {
console.log ( "大吉大利,今晚吃鸡" );
}
}
</script>
</body>
</html>
2. 内置对象:
- 内置对象api: js作者提前写好的对象,里面有一些预先定义的方法,我们直接使用即可,无需关心原理
- 学习内置对象: 不需要死记硬背,忘记了随时查阅文档。 用多了自然就记住了,熟能生巧
1.1-数组对象api
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script>
let arr = [10,20,30]
let str = arr.join()
console.log ( str )
var newArr = arr.reverse()
console.log ( newArr )
let arr1 = [10,20,70,40,50,60]
arr1.sort(function (a,b)
{
return a - b
});
console.log ( arr1 )
</script>
</html>
1.2-字符串对象api
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script>
let str = "黑马颜值担当坤哥我爱你么么哒!";
let index1 = str.indexOf("黑马")
let index2 = str.indexOf("坤")
let index3 = str.indexOf("黑坤")
console.log ( index1, index2, index3 )
let str1 = str.substr(2,4)
console.log ( str1 )
let str2 = str.replace("黑马","传智播客")
console.log ( str2 )
let str3 = "我&爱&你"
let arry = str3.split("&")
console.log ( arry )
console.log ( "AKlkshflsLKJHDHL".toLowerCase () )
console.log ( "AKlkshflsLKJHDHL".toUpperCase () )
console.log ( "中文不存在大小写".toLowerCase () )
</script>
</html>
3. 工厂函数(了解)
<script>
function creatPerson(name, age, sex) {
let p = {
namer: name,
ager: age
}
p.sex = sex
return p
}
let zxy = creatPerson('张学友', 18, '男')
let ldh = creatPerson('刘德华', 20, "男")
console.log(zxy);
console.log(ldh);
</script>
4. 构造函数(重点)
- 构造函数:作用于工厂函数一致,但是代码更少
- 构造函数:使用new来调用的函数
new 工作原理
- 1.创建一个空对象{}
- 2.this指向这个对象 this.属性名 = {}
- 3.对象赋值
- 4.返回这个对象
new 细节:
- (1)构造函数首字母大写:为了提醒别人不要忘记new关键字
- (2)构造函数里主动写了return:
如果是值类型:无效 继续返回new创建的对象 引用类型:有效 会覆盖new创建的对象
function Person(name, age) {
this.name = name
this.age = age
}
let zs = new Person('张三', 18)
let l4 = new Person('李四', 19)
console.log(zs, l4);
5.原型对象
1.什么是原型对象:
- 任何构造函数在被创建的时候,系统都会自动帮我们创建一个与之对应的对象,称之为原型对象
2.原型对象作用:
3.谁可以访问原型对象中的成员(属性和方法)
- 构造函数自身:
构造函数名.prototype - 构造函数实例化的每一个对象:点语法直接访问
<!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>
function Person(name,age){
this.name = name;
this.age = age;
};
console.log(Person.prototype);
Person.prototype.sayHi = function(){
console.log('坤坤我爱你');
};
let p1 = new Person('班长',18);
p1.sayHi();
let p2 = new Person('班花',20);
p2.sayHi();
console.log(p1.sayHi === p2.sayHi);
</script>
</body>
</html>
6.构造函数 原型对象 实例对象的关系
- 1.prototype:属于构造函数,指向原型对象
作用:解决内存浪费+变量污染 - 2.proto:属于实例对象,指向原型对象
作用:实例对象访问原型对象的成员 - 3.constructor:属于原型对象,指向构造函数
作用让实例对象知道自己是谁创建的
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.eat = function () {
console.log('鸡腿');
}
let p = new Person('张三', 19)
console.log(p);
console.log(p.eat);
1.构造函数:每一个构造函数都有一个属性prototype,指向原型对象 2.原型对象:每一个原型对象都有一个属性constructor,指向构造函数 3.实例对象:每一个实例对象都有一个属性_proto_,指向原型对象 先有构造函数 再有原型对象 再有实例对象
|