this指向、函数、new关键字作用底层原理
函数中this的指向
1、在普通函数中this指向window
2、在定时器函数中this指向window
3、在事件函数中this指向事件源
4、在对象函数中this指向当前对象 没有call() apply() bind() 不用考虑this指向(后面的几次this)
自定义函数中this指向当前对象
5、在构造函数中this指向实例化对象
6、在原型函数中:如果原型调用,this指向原型;如果实例对象调用,this指向实例对象
7、在数组函数中this指向当前数组
除了箭头函数,谁调用指向谁
创建对象的四种方式
1、字面量创建
2、new Object()
3、工厂模式
4、构造函数
对象继承
1、原型继承
2、构造继承(call方法继承)
3、拷贝继承
new关键字的作用和底层原理
一、作用:实例化对象返回一个新对象,让构造函数中的this指向实例化对象
二、new关键字的底层原理:
1、 var p1 = { } 创建了对象,开辟内存空间,地址存在栈中,
2、Person.call(p1) 通过call方法改变函数Person中的this指向,指向实例对象p1
3、p1._proto _==Person.prototype p1的指针指向构造函数原型,地址相同,属性和方法都能继承
原型、构造函数、实例对象三者关系:
1、任何一个函数都有prototype属性(截止目前)(箭头没有) 本身是一个对象
2、构造函数也有prototype属性,本身是一个对象,我们称之为原型
3、原型上的属性和方法都可以被实例化对象所继承*
4、任何一个对象都有constructor属性,实例化对象的constructor属性指向构造函数
5、原型也是对象也有constructto属性,原型对象的constructor属性指向构造函数
6、任何一个对象都有__proto_ 属性,实例对象的__proto _属性指向构造函数的原型
一个对象没有这个属性 返回undefined
函数的定义方式
1、函数声明
function demo1() {
var num = 12
}
2、函数表达式
var demo2 = function(x,y) 【
var sum = x + y
}
3、构造函数
var demo3 = new Function (’x’,'y','return x + y')
函数的调用方式
1、函数名()
2、call()/apply() this指向 一个参数 多个参数
3、自调用 在函数后加()
4、对象中的函数调用
5、数组中的函数的调用