原型
目的:1、节省内存空间,2、实现数据共享
原型链:实例与原型的链条称作 原型链
原型的指向可以发生改变。
任何一个对象都有__proto__属性,实例化对象的__proto__属性指向的的构造函数的原型,因为任何一个对象都有__proto__属性,原型也是对象,所以原型也有__proto__属性,原型也有__proto__属性指向null
什么是继承
继承:子类可以使用父类的所有功能,并且对这些功能进行扩展。继承的过程,就是从一般到特殊的过程。
原型继承
通过原型继承,子类本身构造函数中的属性和方法以及子类原型中的属性和方法都可以获取到,并且父类构造函数中的属性和方法以及父类原型中的属性和方法也可以获取到。
构造函数继承
1.call方法的作用
函数名.call()可以实现函数的调用
call()会改变this指向,如果没有参数this指向window
call()会改变this指向,如果有参数this指向该参数
2、Call方法实现继承
call()会改变this指向,如果有参数this指向该参数中第一个参数,剩下的参数是个参数列表
我们可以通过call方法改变this指向的特性去实现继承, 构造函数中的this指向实例化对象,
深拷贝与浅拷贝
1.javascript变量包含两种不同数据类型的值:基本类型和引用类型。
基本类型值指的是简单的数据段,包括es6里面新增的一共是有6种,具体如下:number、string、boolean、null、undefined、symbol。
引用类型值指那些可能由多个值构成的对象,只有一种如下:object。
在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值。
2.javascript的变量的存储方式:栈(stack)和堆(heap)。
栈:自动分配内存空间,系统自动释放,里面存放的是基本类型的值和引用类型的地址
堆:动态分配的内存,大小不定,也不会自动释放。里面存放引用类型的值。
浅拷贝
定义:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。”里面的对象“会在原来的对象和它的副本之间共享。
深拷贝
定义:深拷贝不仅将原对象的各个属性逐个复制出去,而且将原对象各个属性所包含的对象也依次采用深复制的方法递归复制到新对象上,所以对一个对象的修改并不会影响另一个对象。
拷贝继承
定义:深拷贝不仅将原对象的各个属性逐个复制出去,而且将原对象各个属性所包含的对象也依次采用深复制的方法递归复制到新对象上,所以对一个对象的修改并不会影响另一个对象。
函数内this的指向