原型与原型链
课堂小结:
一、面向对象与面向过程区别
1、面向过程是亲力亲为的,事物巨细,面面俱到,步步紧跟,有条不紊。
2、面向对象就是找一个对象,指挥得结果。
3、面向对象将执行者转化为指挥者。
4、面向对象不是面向过程的代替,而是面向过程的封装。
二、 面向对象的特性
1、封装性
2、继承性
3、(多态)抽象
三、面向对象的的方式
// 创建一个模板,用于创建对象(实例instance)
// 而在js中创建的对象的模板是构造函数
// 在其他语言中是用类
四、构造函数
// 1、会在内存中创建一个空的对象,
// 2、会设置构造函数的this,让this指向刚刚创建好的对象
// 3、执行构造函数的代码
// 4、返回对象
五、
1、 我们无法使用typeof获取对象的具体类型;
2 获取对象的具体类型:constructor 构造器
var arr=[]; console.log(arr.constructor)
instanceof 判断某个对象是否是某个构造函数的实例/对象(判断某个函数时不时某个构造函数创建的)
console.log(arr instanceof Array)
六、静态成员与实例成员
// 这个就是静态成员:直接对象来调用
var Math={
PI:3.1415,
min:function(){
},
max:function(){
}
}
// 实例成员:构造函数的成员就是实例成员
// 什么是实例:对象的另一种说法
七、原型与原型链
每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去
// 当调用属性或方法是时候,先去找对象本身属性/放发
// 如果对象没有该属性/方法,此时去调用原型中的属性/方法,
// 如果对象没有。原型没有,此时就会报错
// stu1=__proto__ 的对象等于构造函数中的Studenttwo.prototype;
// __proto__是非标准的属性
原型中的constructor指向的是构造函数,打印的是当前构造函数