今天被刚来的实习生问及一个普遍说不清道不明的问题,什么是构造函数?经过一番思索,决定从JavaScript 的函数本质开始说起。(以下简称js)
要想搞明白构造函数,就要先弄懂什么是函数?以及js中有哪几种函数的创建形式。
什么是函数?
函数简单的说就是重复执行的代码块;按照JavaScript权威指南(第六版)(作者是David Flanagan)
(注:这本书还是很适合初学者看的,提供一个下载链接: )
书中的说法:函数是这样的一段JavaScript 代码,它只定义一次,但可能被执行或调用任意次。
Js中有哪几种创建形式呢?
函数使用function 关键字来定义,其后跟随,函数名称标识符、 一对圆括号、一对花括号。 JavaScript中有三种创建形式,分别是:
① 声明式
function fn( ){ }; 这种定义的方式,无论在哪儿定义,别处都可以调用 ;
② 函数的字面量或叫直接量或称表达式
var fn=function () { }; 此时函数作为表达式存在,调用只能在定义的后面;
解释一下表达式:凡是将数据和运算符等联系起来有值得式子就是表达式。
采用new Function 方法;
③ 以new Function 的形式
varfn = new Function (arg1 , arg2 ,arg3 ,…, argN , body )
解释:
Function构造函数所有的参数都是字符串类型。除了最后一个参数, 其余的参数都作为生成函数的参数即形参。这里可以没有参数。最后一个参数, 表示的是要创建函数的函数体。
另外,js 中任意函数都是Function 的实例。
有了以上的铺垫就可以来说明什么是构造函数了:
构造:它是设计,组合。将没有的东西先概念实现,比如建筑图纸
构造函数:首先,它是函数,并且任何的函数都可以作为构造函数存在,它的本质是初始化对象。构造函数都是和new 关键词一起使用的。 new就是在创建对象,从无到有,构造函数就是在为初始化的对象添加属性和方法( 成员 ) 好比:
this.name = xiaoming;
this.age= 10;
this.gender= '男';
其实刚才的创建函数的第三种方法就是利用构造函数的方式实现的
如: var obj = new Person( “xiaoming ”, 10 ,”男” ) ;
有了构造函数,那构造对象就成以下四步了:
1, new 申请内存, 创建对象
2, 调用构造函数, 构造函数有一个隐式参数, 即 this
3, 刚创建出来的对象的引用 赋值给 this, 由函数处理.
4, 在构造函数中利用 this.成员 = 值 来给对象添加成员 .
以一个典型的案例结尾 :
Function Person( name,age,gender ) {
this.name = name;
this.age=age;
this.gender = gender;
this.sayHello = function () {
console.log('Hello '+ name );
};
}
var P1= new Person('jim',10,‘男’);
var P2= new Person(tom,20,‘女);
by Turbo beijing