Day6 打卡 对象
每日一句
The more dumplings you eat, the more money you make.
饺子吃得越多,钱就赚得越多。
对象的三大特点
- 封装:创建一个对象,集中保存事物的属性和功能。
- 继承:有显(prototype)和隐式(proto)
- 多态:同一个函数在不同情况下表现出不同的状态
封装对象有3种基本方式
一:字面量形式:(new Object简写)
var 对象名 = { 属性名: 值, ..., 方法名: function (){...}, ... }
二:new Object
var 对象名 = new Object();对象名.属性名 = 值;对象名.方法名 = function() {...}
访问成员属性或方法:对象名.属性名/方法名 或 对象名['属性名'/'方法名']
Tips: 对象访问成员的方式有3种,除了上面两种,还有一种通过变量的方式访问
属性是来自一个变量:对象名[变量]
遍历对象成员:
for(var 属性名 in 对象名|数组名) {
对象名|数组名[属性名]
}
三:构造函数形式
以上两种形式创建变量只能创建一个对象,如果要创建多个对象则可以用构造函数来创建。
概念:描述同一类型的所有对象的统一结构函数。
为什么使用构造函数?-> 可复用对象的结构
1.定义构造函数
function 函数名(形参1,形参2,...) {
this.属性名 = 形参1;
this.xxx = xxx;
this.方法名 = function () {
this.属性名
...
}
}
2.使用构造函数反复创建对象
var 对角名 = new 函数名(实参1, 实参2,...);
new 做了4件事
1.创建了一个指定类型的对象
2.让子对象继承构造函数的原型对象
3.调用构造函数
> 将构造函数中this指定刚创建的对象
> 在构造函数中强行赋值方式,为新对象添加了规定的属性和方法
4.返回对象的地址
Tips:构造函数中不要包含方法定义的,浪费内存,需要将方法放到原型中,让子对象可共用
对象原型的this指向
不看定义,谁调用就指谁
小结:
obj.fun(); // this==>obj
new Fun(); // this==>指向创建的新对象
原型对象中共有方法this, 要看将来调用些方法.前的对象
内置类型的原型对象
内置类型有几种?
内置类型有12种
- String,Number,Boolean
- Array,Date,RegExp
- Math(严格来说不是类型,是一个{}对象)
- Error
- Function,Object
- global(全局对象,浏览器中指Window,严格来说不是类型)
- Symbool(ES6)
类型是有2部分组成:
构造函数
原型对象
prototype
可通过prototype来查看,如Array.prototype, String.portotype, Date.prototype,...
如果原型对象中没有,则可以自定义
构造函数.prototype.方法名 = function() {
...
}
原型链
原型链:由多级父对象逐级继承形成的链式结构。
保存着一个对象可用的所有属性和方法
控制着属性和方法的使用顺序:就近原则(先子后父)
所有对象的toString结果不一样
({}).toString(); // '[object Object]'
[1,2,3].toString(); // '1,2,3'
Date.now().toString(); // '1643096515711'
以上就体现了多态。
多态包括2种
重载overload: 同一个函数,输入不同参数,执行不同逻辑。
重写override:子对象中重写一个父对象中重名的函数。
总结
谈谈你对面向对象的理解?
哈哈这也太宽泛了吧,这说啥好呢!!!
三大特点:封装,继承,多态
封装:创建对象有2种:只创建一个对象:{}, 创建多个相同结构对象就用构造函数
继承:多个子对象都拥有相同的属生或方法,就要放在构造函数的原型中
多态:只要觉得父对象中的成员不好用,可在子对象中重写其同名成员