构造函数原型
//第二个代码块
/*没用用到函数原型来写方法*/
funtion Car(name,price){
this.name=name;
this.price=price;
this.action=function(){
console.log('我不是原型的函数');
}
}
let car1=new Car('玛莎拉蒂','100W');
let car2=new Car('宝马','200W');
console.log(car1.action===car2.action)/*输出结果是false,
解析:因为每实例化一个对象时都会产生一个新内=的空间存着action函数,
再对象很多时候就会出现内存浪费现象*/
//第二个代码块
/*用到构造函数原型来写方法*/
funtion Car(name,price){
this.name=name;
this.price=price;
}
Car.prototype.action=function(){
console.log('我是原型对象的函数');
}
let car1=new Car('玛莎拉蒂','100W');
let car2=new Car('宝马','200W');
console.log(car1.action===car2.action)/*输出结果是true,
解析:原型对象prototype是一直存着的,相当于已经拥有一定的空间,
然后在它里面创建方法的时候就相当于是它自己的函数,可以共享,这个时候外部
对象来调用这个函数时候,就不用重新开辟一个空间来存这个方法了*/
所以一般公共属性用prototype用来定义,节约内存;
对象原型
在第二个代码块中的car1和car2中调用的action函数,为什么呢直接调用不是直接的函数呢?
==因为对象car1和对象car2会有系统自动添加对象原型对象 “__ proto__”,它是指向prototype的。
==