js面向对象

1.什么是对象?

  多个数据的封装体

  用来保存多个数据的容器

  一个对象代表现实中的一个事物

2.为什么要用对象?

  统一管理多个数据

3.如何访问对象内部数据?

  ( . )属性名:编码简单,有时不能用

    [ ‘ 属性名 ’ ]:编码复杂,能通用

4.什么时候必须使用[ ‘ 属性名 ’ ]的方法?

  属性名包含特殊字符: - 空格

  属性名不确定

5.js中如何去生成对象?

  (1)单例模式/字面量定义 var obj={name:"zhang"}

  (2)var obj=new Object() 内置类

      Obj.name="zhang"

      js内置的类 string array object number boolean  date function

  (3)工厂模式

      function create(){

        var obj={}

        Obj.name=

        return obj;

      }  

  (4)构造函数

      function Person(){

        this.name="li"

      }

      var zhang=new Person()

6.this的问题

  任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window

  所有函数内部都有一个变量this

  它的值是调用函数的当前对象

7.原型对象

  把相同的属性和方法写在构造函数的原型对象里。
  构造函数的实例对象 new 出来的实例就全部可以访问。
  原型对象存在的最大作用就是节省内存空间

8.原型prototype

  每个函数 类天生自带一个prototype的属性,这个属性是个对象,它里面天生自带一个constructor的属性,属性值是当前函数/类本身;

  每个实例对象 天生自带一个__proto__的属性,这个属性是对象,它指向当前实例对象的类的原型

9.原型链

  每个对象天生有一个__proto__,指向类的原型。

  prototype 和 __proto__

  (1).prototype是类的或者函数的,__proto__是对象的。

  (2).prototype是存储机制,程序员来实现。__proto__是查找机制(浏览器的)。

  例子:zhangsan.name

    zhangsan这个对象首先看name是私有的,是就直接使用,不是的就通过__proto__往他的类的prototype上查找,有就直接使用,没有就继续往上查找,直到查找到基类Object,没有就是undefined,有就直接使用,这种查找机制叫原型链。

10.类的继承

  1. 原型继承 将父类的实例对象赋值给子类的原型,私有的公有的都继承为公有的
  2. Call继承  call方法是函数/类天生自带的一个方法,将父类私有的继承为子类私有的
  3. 冒充对象继承   将父类私有的和公有的都继承为子类私有的,使用for  in
  4. 混合继承  私有的继承为私有的  私有的和公有的再次继承为公有的
  5. 组合继承 私有继承为私有  公有继承为公有

    私有继承私有  借助call 公有继承为公有 不能是原型赋值给原型。因为原型是对象,是复合数据类型,是地址赋值给了前者,导致二者指向同一个原型,得克隆。   

    Js的克隆如何实现   var obj2 = object.create(obj1)

    6.中间类继承 (伪数组)

原文地址:https://www.cnblogs.com/QQ2534978223/p/11359037.html