js_高级_对象、面向对象、构造函数、实例对象、原型、原型链

1、什么是对象

  汽车不是对象是是一类事物,一辆汽车是对象。

  

  

2、什么是面向对象

       

  

3、面向对象的特点

  

  案例来理解  面向过程 和 面向对象---打印出学生的成绩表

扫描二维码关注公众号,回复: 6288040 查看本文章

    面向过程:如何做这件事情 ,把事情拆成一个个的,然后一步步做?

  

  面向对象:考虑这件事情可以抽象出哪些对象?对象有哪些成员---不着急先去做这件事情

  

  注意:es6开始已经支持类了

4、如何创建对象

  在面向对象的过程中我们要创建对面,创建对象的方式

  1、字面量

  2、new Object()

  3、工厂函数方式

  4、构造函数---函数名首字母大写

    

    new 之后发生了什么

    

         

 5、判断对象的具体类型

  

6、对象的静态成员和实例成员

  

  

7、构造函数的原型和三角关系

  

  

  解决方式2:构造函数的原型

    所有的构造函数内部都有一个属性叫原型(原型对象)---原型的本质就是一个普通的对象,所以可以动态的添加成员

    

    

    对象可以访问所有原型对象的成员

    占的是同一个内存空间,地址是相同的,地址指向sayHi

    !!!我们通过原型对象添加的成员(属性和方法)和我们在构造函数中添加的成员(属性和方法)有什么区别呢?

    认识:proto属性 ---实例化的对象的这个__proto__属性里面的成员就是在构造函数原型对象上添加的成员

    所有的构造函数内部都有一个属性叫原型(原型对象)---原型的本质就是一个普通的对象,所以可以动态的添加成员

    所有的对象都有一个__proto__属性

    

      

      1、构造函数的原型(原型对象)---所有的构造函数都有原型prototype,实例化出的对象可以直接访问原型上的成员(所以一般把公共的方法放在原型上,节约内存优化性能);

      2、对象的proto属性---所有的对象都有proto属性,proto属性和该对象的构造函数的原型相等,即proto属性又指向了原型对象;

          为什么对象要有proto这个属性呢?(为了对象可以直接访问原型中的成员)

          因为对象可以访问到构造函数中的原型对象的成员,所以对象中要有一个属性去引用(指向)prototype,即proto === prototype

      3、constructor属性(构造函数/构造器)---是原型中的一个属性,记录了创建该对象的构造函数  ; 

      ----以上3者的作用和联系

      

    原型对象的proto又指向谁呢?

    

8、原型链

充分运用了原型对象

所以的对象都有proto  

proto又指向原型对象

这就是一个往上的链

a、理解 var obj =  new 构造函数 ()   后发生的事情,就可以理解哪些成员是对象自身的而不是原型上的。

  new 构造函数 () 发生的事情:

  1、创建一个空对象 2、this指向这个空对象

  3、调用构造函数,执行构造函数里面的代码(所以对象自身的成员就是在构造函数中定义的成员) 4、返回刚刚创建出的那个对象给obj。

b、对象访问成员是(就近原则):先找对象自身有没有这个成员,没有的话就往原型上找,原型也是对象,那又可以往原型对象的原型上找。。。以此类推找到最顶端

c、原型链的运用

      

d、对象中设置属性和读取属性的区别

  

e、使用原型的注意点

  构造函数才有prototype原型属性

  a、注意点1:

  1、设置对象的方法时:方法一(不方便,代码重复)

  

  2、设置对象的方法时:方法二(注意要重新设置constructor属性)

  

   b、注意点2

  

 9、原型对象的一个应用:扩展内置对象中的方法

  比如:想求数组中所有偶数的和

  

  

      

    

  

  

  

猜你喜欢

转载自www.cnblogs.com/yangyutian/p/10931651.html