- 原型
构造函数是一种特殊的方法,主要用来创建对象和初始化对象。每一个构造函数都要prototype(原型)(箭头函数以及Function.prototype.bind()没有)属性,这个prototype(原型)属性是一个指针,指向一个对象,这个对象的用途是包函特定类型的所以实力共享的属性和方法,即这个原型对象是用来给实例对象共享属性和方法的。每一个实例对象的_proto_都指向这个构造函数/类的prototype属性
面向对象的三大特性:继承/多态/封装
关于new操作符:- new执行的函数,函数内部默认生成了一个对象
- 函数内部的this默认指向了这个new生成的对象
- new执行函数生成的这个对象,是函数的默认返回值
ES5例子:
function Person(obj){
this.name = obj.name
this.age = obj.age
}
原型方法
Person.prototype.say = function(){
console.log('你好',this.name)
}
p为实例化对象,new Person()这个操作为构造函数的实例化
let p = new Person({name: '张三',age:'12'})
console.log(p.name,p.age)
p.say()
ES6例子
class Person(
constructor(obj){
this.name = obj.name
this.age = obj.age
}
say() {
console.log(this.name)
}
)
let p = new Person({name:'张三',age:'12'})
console.log(p.name,p.age)
p.say()
1.什么是构造函数
在JavaScript中,用 new 关键字来调用的函数,称为构造函数。首字母一般大写;
2.为什么要用构造函数
如下:
像下面这样,我们可以把每一位同学的信息当做一个对象来处理。但是,我们会发现,我们重复地写了很多无意义的代码。比如 name、age、gender、hobby 。如果这个班上有60个学生,我们得重复写60遍。
var p1 = { name: 'a', age: 6, gender: '男', hobby: 'basketball' };
var p2 = { name: 'b', age: 6, gender: '女', hobby: 'dancing' };
var p3 = { name: 'c', age: 6, gender: '女', hobby: 'singing' };
var p4 = { name: 'd', age: 6, gender: '男', hobby: 'football' };
这个时候,构造函数的优势就体现出来了。我们发现,虽然每位同学都有 name、gender、hobby这些属性, 但它们都是不同的,那我们就把这些属性当做构造函数的参数传递进去。而由于都是一年级的学生,age 基本都是6岁,所以我们就可以写死,遇到特殊情况再单独做处理即可。此时,我们就可以创建以下的函数
function Person (name,gender,hobby) {
this.name = name;
this.gender = gender;
this.hobby = hobby;
this.age = 6;
}
创建上面的函数后,可以通过 new 关键字调用, 也就是说通过构造函数来创建对象;
var p1 = new Person ('a','男','basketball');
var p2 = new Person ('b','女','dancing');
var p3 = new Person ('c','女','singing');
var p4 = new Person ('d','男','football');
- 闭包
首先说明什么是闭包,闭包简单来说就是函数嵌套函数,内部函数引用来外部函数的变量,从而导致垃圾回收
机制没有把当前变量回收掉,这样的操作带来了内存泄漏的影响,当内存泄漏到一定程度会影响你的项目运行
变得卡顿等等问题。因此在项目中我们要尽量避免内存泄漏。