一、什么是封装?
封装就是一个把事物包装起来,尽可能的隐藏细节
二、构造函数的封装
function Cat(name,color){
this.name=name;
this.color=color;
}
var cat1=new Cat('大毛','黄色');
var cat2=new Cat('二毛','黑色');
> 这就是构造函数的封装,关键词是得有this和new才算是构造函数
> 以下有两个方法可以判断cat1和cat2是否指向同个原型
1. constructor属性可以指向对象的原型
console.log(cat1.constructor==Cat);//true
console.log(cat2.constructor==Cat);//true
2.instanceof 运算符验证原生对象和实例对象之间的关系
console.log(cat1 instanceof Cat);//true
但是利用构造函数封装,容易产生浪费内存,如果构造函数里面有个属性和方法是不变的,那么每次创建一个实例都要把不变的属性和方法都重新创建一遍,这就造成了内存浪费,可以用prototype来解决
在JavaScript中,每个构造函数都有一个prototype属性,指向另一个对象,这个对象的属性和方法都会被prototype给继承,因此我们可以把不变的属性和方法放在prototype里面;
function Cat(name,color){
this.name=name;
this.color=color;
}
//prototype这样使用
Cat.prototype.type="猫科动物";
Cat.prototype.eat=function(){console.log(this.name+"在吃饭")};
var cat1=new Cat('大毛','黄色');
var cat2=new Cat('二毛','黑色');
cat1.eat();
cat2.eat();