面向对象继承
复习原型
目的:1、节省内存空间,2、实现数据共享
原型链:实例与原型的链条称作 原型链
- 原型的指向是否可以改变
原型对象的constructor属性指向构造函数本身,让学生原型指向人的构造函数。
- 原型链最终指向了哪里
原型链最终指向了null
- 构造函数继承
- 、call方法的作用
1、函数名.call()可以实现函数的调用
2、call()会改变this指向,如果没有参数this指向window
- call()会改变this指向,如果有参数this指向该参数
、Call方法实现继承
4、call()会改变this指向,如果有参数this指向该参数中第一个参数,剩下的参数是个参数列表
- 深拷贝与浅拷贝
- 、相关知识点
1.javascript变量包含两种不同数据类型的值:基本类型和引用类型。
基本类型值指的是简单的数据段,包括es6里面新增的一共是有6种,具体如下:number、string、boolean、null、undefined、symbol。
引用类型值指那些可能由多个值构成的对象,只有一种如下:object。
在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值。2.javascript的变量的存储方式:栈(stack)和堆(heap)。
栈:自动分配内存空间,系统自动释放,里面存放的是基本类型的值和引用类型的地址
堆:动态分配的内存,大小不定,也不会自动释放。里面存放引用类型的值。
- 浅拷贝
定义:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。”里面的对象“会在原来的对象和它的副本之间共享。
基本数据类型Number(赋值操作)
- 深拷贝
定义:深拷贝不仅将原对象的各个属性逐个复制出去,而且将原对象各个属性所包含的对象也依次采用深复制的方法递归复制到新对象上,所以对一个对象的修改并不会影响另一个对象。
数组(注意:该数组只是单纯的数组,如果数组里面嵌套对象,则下面的几种方法都不是深拷贝。)
法一:for循环
var arr1 = [1,2,3];
var arr2 = copyArr(arr1);
function copyArr(arr){
var res=[];
for(var i=0,length=arr.length;i<length;i++)
{
res.push(arr[i]);
}
return res; }
法二: slice
var arr1 = [1,2,3];
var arr2 = arr1.slice(0);
法三: concat
var arr1 = [1,2,3];
var arr2 = arr1.concat();
对象
法一:for循环
let obj1={count:1,name:'grace',age:1};
let obj2 = copyObj(obj){
let res = {};
for(let key in obj){
res[key]=obj[key]; }
return res; }
- 拷贝继承
定义:深拷贝不仅将原对象的各个属性逐个复制出去,而且将原对象各个属性所包含的对象也依次采用深复制的方法递归复制到新对象上,所以对一个对象的修改并不会影响另一个对象。
posted on 2021-12-12 17:49 jaksgfdshkv 阅读(27) 评论(0) 编辑 收藏 举报