day38 面向对象 笔记2021.10.12

创建对象的方式:

1)字面量方式:

2)系统内置的构造函数:

  • 自动创建对象

  • 手动添加成员

  • 自动返回对象

3) 工厂函数方式:

手动创建对象

手动添加成员

手动返回对象 

系统内置的构造函数:Object,Array,Date,Function,RegExp,String,Number,Boolean 

Object是系统的顶级构造函数

自定义构造函数:

1. 构造函数的名字首字母大写(建议大写)

2. 构造函数中的this指向实例化的实例对象(构造函数中添加的成员函数中的this指向,调用这个方法的对象)

3. 在构造函数中,不需写return

--如果写了return,而返回的是基本数据类型,则不影响构造函数实例化

--如果写了return,而返回的是复杂数据类型,则会影响构造函数实例化(这个构造函数白写了)

4. 实例化构造函数的时候,构造函数后的括号可以不写,但是如果要传递参数则一定要写(建议都写上)

自定义构造函数:

作用:就是用来创建对象,也叫做实例化对象的

在创建对象,new 构造函数的时候,做了哪些事情?

1. 在内存中开辟一个对象的空间地址

2. 将关键字this,指向创建的这个对象空间

3. 执行函数内的代码(给这个对象添加成员)

4. 将这个对象空间地址返回

访问对象中的成员:对象.属性   --js是动态语言,在访问某个成员的时候,先去该对象里面查找,如果找不到则,添加一个成员,但是没有赋值(属性值)

原型对象:(将方法写到原型对象中,可以解决构造函数中的写方法造成的内存浪费问题)

__proto__

对象中都有一个属性 __proto__,这个属性指向的是一个对象空间

实例对象也是对象,实例中也有__proto__属性,指向的对象空间

__proto__属性是属于非标准属性,这个属性是给浏览器使用

prototype

函数中都以一个属性 prototype,这个属性指向的也是一个对象空间

构造函数也是函数,构造函数中也有prototype属性,指向一个对象空间

prototype属性是标准属性,这个属性是给程序员使用的

总结:

1)构造函数创建的实例对象中的__proto__属性指向的对象空间,和这个构造函数的属性prototype指向的对象空间是同一个,这个对象我们叫原型对象

2)原型对象中自带了一个属性constructor,这个属性指向的是构造函数

3)对象可以存储数据,原型对象也是对象,也可以存储数据

4)给原型对象添加成员,使用构造函数的prototype来添加

5)属性直接写在构造函数体内方法写在原型上

(将方法写到原型对象中,可以解决构造函数中的写方法造成的内存浪费问题)

  • p1 自己没有 sayHi 方法,就会去自己的 __proto__ 中查找

  • p1.__proto__ 就是 Person.prototype

  • 我们又向 Person.prototype 中添加了 sayHi 方法

  • 所以 p1.sayHi 就可以执行了
     

      判断对象的类型
    instanceof 检测对象是否是某个类的实例

  • 对象 instanceof 内置构造函数,  --(返回值为布尔值)

  • “对象.constructor”常被用来严格区分“对象的类型”

  • 检测数据的类型: typeof(检测数据)       --返回值为类型

    万能数据类型检测: Object.prototype.toString.call(检测数据)    --返回值为object 数据类型

Guess you like

Origin blog.csdn.net/weixin_50163576/article/details/120738677