1.构造函数和原型
1.1对象的三种创建方式
1、字面量方式
var obj={
};
2、new关键字
var ll=new Object();
3、构造函数方式
function Love(name,age){
this.name=name;
this.age=age;
this.say=function(){
console.log("沙浪嘿哟")
}
}
var ll=new love("罗罗",20)
ll.say();
1.2静态成员和实例成员
1.2.1实例成员
实例成员是构造函数内部通过this添加的成员,如下的name、age、say就是实例成员,实例成员只能通过实例化的对象进行访问
function Love(name,age){
this.name=name;
this.age=age;
this.say=function(){
console.log("沙浪嘿哟")
}
}
var ll=new Love("罗罗",20)
ll.say();
//实例成员只能通过实例化的对象进行访问
console.log(ll.name)
1.2.2静态成员
静态成员是通过构造函数直接添加的成员,如下的sex就是静态成员,静态成员只能通过构造函数来访问
function Love(name,age){
this.name=name;
this.age=age;
this.say=function(){
console.log("沙浪嘿哟")
}
}
Love.sex="男"
var ll=new Love("罗罗",20)
//静态成员只能通过构造函数来访问
console.log(Love.sex)
1.3构造函数的问题
function Love(name,age){
this.name=name;
this.age=age;
this.say=function(){
console.log("沙浪嘿哟")
}
}
var ll=new Love("罗罗",20)
var lz=new Love("玲玲",18)
console.log(ll.say===lz.say)//打印结果为false
由此可见,不同的实例对象会占用不同地址的函数,导致浪费内存的问题,我们希望不同的对象可以使用同一个函数,从而节约内存。
1.4构造函数原型prototype
构造函数通过原型分配的函数是所有对象所共享的。
JavaScript 规定,每一个构造函数都有一个prototype 属性,指向另一个对象。注意这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有。
我们可以把那些不变的方法,直接定义在 prototype 对象上,这样所有对象的实例就可以共享这些方法。
function Love(name.age){
this.name=name;
this.age=age;
}
Love.prototype.say=function(){
console.log