构造函数(constructor)的特点:不需要显式地创建对象、直接将属性和方法赋给this对象、没有return语句。构造函数始终以大写字母开头命名,以区分其他函数。
原型(prototype)的特点:创建的每个函数都会有prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。新添加的实例属性与原型属性相同时,原型属性会被屏蔽但不会被改变(可以用delete关键字删除实例属性)。
创建对象的方式:
构造函数:
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName;
}
fuction sayName(){
alert(this.name);
}
var person1=new Person("Nic",29,"Engineer");
原型:
function Person(){
person.protptype.name="Nic";
person.prototype.age=29;
person.prototype.job="Engineer";
person.prototype.sayName=function(){
alert(this.name);
}
}
var person1=new Person();
person1.sayName(); // "Nic"
var person2=new Person();
person2.sayName(); // "Nic"
//原型的可复用体现是可以创建两个一样的实例
构造函数与原型的联系:它们都可以定义对象的属性和方法;原型是通过调用构造函数去创建的对象实例的原型对象(原型可以通过调用构造函数创建实例),所以原型包含构造函数;它们在创建实例时都需要new关键词;
构造函数与原型的不同:构造函数需要传参,而原型可以直接添加这些信息;原型有关键字prototype;