开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情
自定义构造函数
es5里面是没有class的,如果在es5里面想要描述一类对象,使用的语法叫: 自定义构造函数
固定语法:
function 类型的名字(属性参数){
this.属性1 = 属性1;
...
}
如果想要给对象添加方法
function 类名(形参属性){
this.属性1 = 属性1;
...
// 添加方法
this.方法名 = function(){
// 具体的实现过程
}
...
}
自定义构造函数浪费内存
每次在new构造函数的过程中,都会调用构造函数一次,如果把方法也写在构造函数里面,每次new的时候,都会新建一个新的匿名函数——匿名函数的功能都是一样的,但是占用大量的内存。
函数也是对象
只要把函数当做键值对输出,console.dir(函数),发现函数其实也是键值对,所有的函数其实都是由Function构造函数所创建出来的实例对象
函数的创建方式,我们学过两种,这两种其实都是语法糖
函数本质都是由 Function 构造函数new出来的
var fn = new Function('a','b','return a + b;')
证明所有的函数都是由Function创建的
function f1(a,b,c){
return a + b + c;
}
console.log(f1 instanceof Function);// true
var f2 = function(a,b){
return a + b;
}
console.log(f2 instanceof Function);// true
以上代码就证明了所有的函数都是由Function构造函数new出来的
关键字 instanceof
该关键字的作用———— 判断某个对象是否该构造函数的实例对象
var arr = new Array();
console.log(arr instanceof Array);
console.log(arr instanceof Date);
函数对象身上也有会一条原型链
递归
什么是递归?
层层递进,层层回归
具体表现形式: 函数内部自己调用自己
使用递归解决从1到n的求和的问题
function fn(n){
if(n === 1){
return 1;
}
return n + fn(n-1);
}
递归图解
开发中递归一般会用在哪里呢?
深拷贝
遍历DOM树
生成菜单树