一、构造函数的常用方法
1、isPrototypeOf()
定义:构造函数的方法,构造函数原型中,判断对应对象
2、对象.hasOwnProperty(属性名 key)
定义:判断当前属性是否在其构造函数里(key:value)
3、in
定义:判断对象是否具备对应的属性(key in 对象)
hasOwnProperty 判断是否在构造函数里
in 判断是否具有对应属性
4、面试题
编写一个方法 判断对象的当前属性 是否是从原型中得到的
二、面向对象编程的特点
1、抽象性:通过对象分析问题
2、封装性:属性以及方法 封装到对象中 节约维护成本 安全
2.1 公开性
可以通过对象任意传递 不安全
可以任意的传递,任意修改,任意的获取,只要找到对应对象就可以任意的去更改的对应属性
2.2 私有性
只能通过方法对应的访问 以及设置 无法通过对象直接获取
3、继承性:JAVA,PYTHON 会讲继承性
继承性:父类 写公共的方法和属性 子类继承 节约代码
3.1 原型链继承
__proto__ == 构造函数的原型 prototype
将Animal对象 赋值给 Dog原型上 让父级对象作为子集的原型
父级:
子级:
缺点:无法对父级属性进行初始化,所有的属性都是相同的
3.2 冒充继承
通过call或者apply更改对应的this指向完成继承
补充:
call和apply
作用:改变this的指向
A、call()
.call(对象,参数) 更改对应的this执行 将其对应的this执行 执行参数对象
参数1:更改this指向的对象
参数2:当前方法需要的参数
s1.showInfo.call (s2) // 王二
s1.adc.call (s2,1,2,3) // 王二123
B、apply
.apply(对象,[1,2,3])更改对应的this执行 将其对应的this执行 执行参数对象
参数改成数组传递
s1.adc.apply(s2, [3, 4, 5]) // 王二345
==》实例:
父级:
子级:
3.3 混合继承
通过冒充继承 来继承对应属性 ,通过原型继承 继承对应方法
父级:
子级:
孙级:
原型链图:
4、多态性:一个类可以创建 多种对象 js基本用不到
练习题:
创建一个人类然后继承学生类以及教师类,分别通过三种不同的继承方式