1.构造函数的创建
步骤:
(1)隐式创建这个对象
(2)让this指向这个空对象 this = new Object
(3)将实例化对象的__proto__指向构造函数的prototype
(4)添加属性和方法(执行构造函数中的代码)
(5)隐式返回这个对象 return this
优点: 识别明确 批量创建
缺点:浪费内存 一样的方法可以存储多次
2.原型和原型属性
(1)原型对象prototype:没一个构造函数在声明的时候,都会创建一个原型对象prototype 用于存储公共的共享的属性和方法
获取原型 String对象 Date对象 Array RegExp
(2)原型属性__proto__:每一个实例化对象在创建的时候,都会创建一个原型属性__proto__,指向构造函数的prototype
实例化对象 必须使用new关键字调用构造函数
3.原型创建
将属性和方法添加到构造函数的原型对象上
实例化对象__proto__指向构造函数的prototype
原型链:一种查找方式,先找实例对象本身 如果有就用自己的 没有再依次往__proto__中找 如果找不到就是undefined
优点:解决了浪费内存的问题
缺点:不能传参
4.this的指向问题
(1)在事件处理函数中 this指向触发事件的对象 点谁指向谁
(2)普通函数中this 指向window
(3)在object数据类型中 this指向当前触发方法所在的对象
(4)在定时器中 this指向window
(5)在构造函数中 this指向当前实例化对象
5.call和apply的用法
(1)call和apply都是改变this的指向
(2)函数.call(this的新指向,参数1,参数2,参数3......)
(3)函数.apply(this的新指向,[参数1,参数2,参数3.....])
6.检测数据类型有3种方法
(1)typeof
(2)Object.prototype.toString.call(检测的数据)
(3)instanceof 检测当前实例化对象是否是由该构造函数创建的