js高级-day03

原型对象:

创建对象:第一步,添加自定义构造函数-----构造函数首字母大写,普通函数驼峰命名法

作用:数据共享,节省内存空间   实例化对象

【构造函数中的原型对象(prototype)和实例对象中的原型对象(__proto__)是相同,

     实例对象中的原型对象(__proto__)指向 构造函数中的原型对象(prototype)   

      console.log(Person.prototype == obj.__proto__); 】

【原型指向可以发生改变;实例对象中的原型__proto__指向的是创建这个对象的构造函数中的原型对象prototype;构造函数中的原型对象prototype的指向发生了改变, 实例对象中的原型__proto__指向也会发生改变】

【原型对象是一个对象 ,有一个 __proto__ 指向 Object这个构造函数中的原型对象prototype,最终指向null】

【实例对象中 __proto__ 指向 原型对象中 prototype】

【实例对象中的__proto__ ---->Person.prototype ----->Object.prototype---->null;】

【dvObj.__proto__--->HTMLDivElement.prototype的__proto__ ---->HTMLElement---->Element---> Node----->EventTarget----->Object---null】

【原型的指向可以发生改变,指向人的实例对象----------先一步改变指向】

【通过原型对象添加eat方法---实现方法共享,节省内存空间】

【如果原型的指向发生了改变,但是又需要用原型对象中的方法和属性, 可以将指向发生改变放在最前面,发生改变后,再来添加属性和方法,这样就可以使用了。】

原型链:是一个关系,实例对象和原型对象之间的关系,关系是通过实例对象的__proto__联系的。

原型对象的继承:面向对象的三大特征:封装,继承,多态

封装:将一个值封装一个变量,将一段代码封装在一个函数中,将多个函数封装在对象中,将多个对象封装在一个js文件中

继承:

1. 修改原型对象的指向实现继承  【 缺陷:属性重复】

2. 借用构造函数实现继承:要继承的子构造函数:父构造函数.call(this,属性1,属性2【缺陷:方法不能继承】

3. 组合继承:原型对象+ 构造函数:原型对象+ 构造函数【属性可以不重复,方法也可以继承】

4.拷贝继承:把一个对象中的属性和方法直接拷贝到另一个对象中 使用for-in循环,将一个对象中的所有属性和方法赋值给另一个对象

父级类和子级类之间的继承-----js中没有类,有构造函数,也可以用继承

多态:一个对象有不同的行为,或者同一个行为有不同的对象,产生不同的结果,如果要实现多态,就要先有继承,js可以模拟多态,但是不会去使用,也不会去模拟. 【使用修改原型对象的指向来实现继承】

注意:【因为改变了原型指向的同时实现了继承,直接初始化了属性,继承过来的属性的值都是一样的。】

猜你喜欢

转载自blog.csdn.net/qq_40104992/article/details/89195432