在自身的理解中,这几个概念是分不开的,不能脱离一种去了解另外一种。在网上看到很多资料,但是每个人对于他们的理解可能有些不同,而且发现对某些概念网上的资料有的并没有说清楚,所以本人写了这篇文章,希望能够对读者产生一点作用、
1.首先要介绍js中的构造函数
1.我觉得要理解构造函数,首先应该弄清楚什么是工厂模式,应该在工厂模式的基础上进行介绍,那样更加看的更加清晰一些。
首先我们先建立一个基于工厂模式的函数:
//基于工厂模式创建函数
//1.原料 2.加工 3.出厂
function person(name,age){
//相当于原料
var obj=new Object();
//对原料进行加工
obj.name=name;
obj.age=age;
//产品出厂
return obj;
}
//定义变量来使用
var p1=person("aa",14);
上面的代码就是一个典型的工厂模式函数,通过1.创建原料 2.对原料进行加工 3.出厂 就可以实现。但是我们使用这种方式的时候会遇到一个很大的问题,就是不断的new对象。也就是说每调用一次该函数,,就会在内存中开辟一个新的空间,这样会造成内存很大的浪费。所以我们需要一种更好的方式来创建对象。
2.这时候我们可以使用this关键字来实现更好的方式,同样是上面的代码,我们进行一下改造:
//基于工厂模式创建函数
//1.原料 2.加工 3.出厂
function person(name,age){
//相当于原料
// var obj=new Object();
this.name=name;
this.age=age;
//对原料进行加工
// obj.name=name;
// obj.age=age;
//产品出厂
// return obj;
}
//定义变量来使用
var p1=new person("aa",14);
console.log(p1.name);
仔细
观察代码和上一次代码的不同:1.函数内部没有使用new来创建新对象;2.并且函数没有return返回值;3.在使用的时候使用了new person()来创建新对象。
需要注意:在使用this的时候为什么可以不用在函数内部创建新对象,为什么可以不用返回return
。
3.其实第二部分的函数就可以叫做构造函数啦,只不过有些规则还没有符合构造函数的要求。所以作为构造函数的特点是什么呢?
1.函数名首字母要大写
2.内容使用this关键字来操作私有属性
3.没有return返回值
4.使用new关键字来创建新对象
综上所述,一个完整的构造函数代码(在添加原型之前):
function Person(name,age){
this.name=name;
this.age=age;
}
//定义变量来使用
var p1=new Person("aa",14);
console.log(p1.name);
今天就先写在这里吧,时间有点晚了,原型,继承,原型链真要说起来有点多。就在后面再说吧