javascript函数能通过new操作符来调用构造器,比如new Chenqiguo()。就其定义而言,和普通的函数没有任何区别。事实上区别在于:当函数调用new操作符时,javascript为它提供了一个prototype对象;而当函数被用作构造器构建新的对象时,其内部的[[prototype]]属性就成为了被构建对象的引用
这句话是什么意思呢,我们先来看下面的代码
function Chenqiguo(){
alert('qiguo');
}
Chenqiguo()和new Chenqiguo()出来的效果都是一样的,都会打印qiguo这个字符串,而把代码换成如下的方式的话:
function Chenqiguo(){
alert('qiguo');
}
Chenqiguo.prototype.getName = function(){
alert('prototype qiguo');
}
我们分别用new实例化构造函数和用普通的函数执行对原型求值
var chenqiguo = new Chenqiguo();//打印qiguo
chenqiguo.getName(); //打印prototype name
var name = Chenqiguo(); //打印qiguo
name.getName(); //会报错, name is undefined
可以看到当我们用new 操作符创建的对象的时候能够打印原型上的值,而用常规函数的时候却不能,这样就解释了在我们当把函数当作构造函数创建新的对象的时候,其内部的prototype属性成为了被创建对象的一个引用.
抛开语言层次来观察函数和构造器的话,构造器的名称通常都使用首字母大写的形式来表表明其是一个构造函数,用小写字母的话就表示其是一个普通的函数.作为javascript的开发人员来说,应该严格区分这两种情况,如果是构造器就首字母大写,否则首字母就小写
这句话是什么意思呢,我们先来看下面的代码
function Chenqiguo(){
alert('qiguo');
}
Chenqiguo()和new Chenqiguo()出来的效果都是一样的,都会打印qiguo这个字符串,而把代码换成如下的方式的话:
function Chenqiguo(){
alert('qiguo');
}
Chenqiguo.prototype.getName = function(){
alert('prototype qiguo');
}
我们分别用new实例化构造函数和用普通的函数执行对原型求值
var chenqiguo = new Chenqiguo();//打印qiguo
chenqiguo.getName(); //打印prototype name
var name = Chenqiguo(); //打印qiguo
name.getName(); //会报错, name is undefined
可以看到当我们用new 操作符创建的对象的时候能够打印原型上的值,而用常规函数的时候却不能,这样就解释了在我们当把函数当作构造函数创建新的对象的时候,其内部的prototype属性成为了被创建对象的一个引用.
抛开语言层次来观察函数和构造器的话,构造器的名称通常都使用首字母大写的形式来表表明其是一个构造函数,用小写字母的话就表示其是一个普通的函数.作为javascript的开发人员来说,应该严格区分这两种情况,如果是构造器就首字母大写,否则首字母就小写