首先我们创建一个构造函数,里面定义几个属性。name姓名,age年龄,clas班级,然后我们在实例化两个对象出来,并将这两个对象打印出来。
function app(name) {
this.name = name; //定义姓名由name传递
this.age = 8;//定义年龄
this.clas = 5;//定义班级
}
let a=new app('小黑');
console.log(a);
let b=new app('小白');
console.log(b);
我们将两个对象输入出来看后,发现我们除了姓名name是不一样的,年龄age与班级clas都是一样的。
我们知道我们每实例化一个对象出来,我们就会在内存当中开辟出一个新的内存来使用 ,也就是说我们在内存当中开辟出了这样两个新内存来供对象使用。
这样我们也发现了一些问题,我们存储的东西除了name姓名不一样,其他的都是一样的。也就意味着我们相同的东西再每次新实例化出来以后我们都要为其提供内存,我们记这里实例化出来的两个对象内存为6。有什么办法可以减少使用内存的空间呢?这里我们就需要使用prototype属性。
prototype属性
prototype属性是一个函数的属性,这个属性的值是一个对象。我们这里对年龄与班级进行prototype提取为公共属性。
function app(name) {
this.name = name; //定义姓名由name传递
}
app.prototype.age = 8 //定义年龄 (公共属性)
app.prototype.clas = 5 //定义班级 (公共属性)
let a = new app('小黑');
console.log(a);
let b = new app('小白');
console.log(b);
我们这样提取后,也同样实例化了两个对象,再内存中我们对内存空间的存储就变成了这样。我们可以看到这样明显减少使用了内存的空间,我们刚刚所实例化的对象内存为6,那么这次我们所实例化出来的对象内存我为4,这也只是实例化了两个对象,如果我们实例化更多的对象,我们所省的空间也就更多。
但是我们打印出来对象来看会发现我们只能看到姓名,并不能看到班级和年龄,这里就必须提到__proto__属性了。
__proto__属性它是一个对象的属性,我们可以使用它来获取prototype属性存放的方法与属性。
function app(name) {
this.name = name; //定义姓名由name传递
}
app.prototype.age = 8 //定义年龄 (公共属性)
app.prototype.clas = 5 //定义班级 (公共属性)
let a = new app('小黑');
console.log(a.__proto__);
let b = new app('小白');
console.log(b.__proto__);
现在我们打印出来,就可以看到我们使用prototype属性存放的属性了。
现在我们总结一下 prototype属性是用来存放的,而__proto__属性是用来取我们prototype属性存放的值的。使用prototype属性可以节省我们对内存空间的使用。