原型在开发过程中有什么作用?
答:共享数据
举例说明:
function Person(name) {
this.name = name;
}
Person.prototype.age=18;
var p1=new Person("p1");
var p2=new Person("p2");
var p3=new Person("p3");
console.dir(p1.age)
console.dir(p2.age)
console.dir(p3.age)
输出:
这是后续p1、p2、p3的age属性都指向的是原型中的age;
表面上看就是起到一个全局变量的作用,但是和全局变量还不一样:
function Person(name) {
this.name = name;
}
Person.prototype.age=18;
var p1=new Person("p1");
var p2=new Person("p2");
p1.age=26;
console.dir(p1.age)
console.dir(p2.age)
这个的结果如果按照刚才所说这时两个对象的age属性就应该都变成了26,但结果是
为什么会产生这样的作用
我们来看一下修改前的p1
修改值后的p1
修改后的p1他会出现两个age,一个是原型中的,一个是实例本身的。
这样我们总结出以下规律:
1.对象取值时会先去找实例本身的属性,当实例本身没有此属性才会继续向原型中搜索,所以p1.age是取到的是26;
2.想要修改原型中的值,不能直接通过实例.属性名这样的方式,这样只能在实例中新建一个同名属性;
同时也可以通过原型,来减少创建实例时开辟函数的所耗费的资源:
像下面这么写,开辟10个实例,便会开辟是个eat方法
function Person(name) {
this.name = name;
this.eat=function () {
console.log('eat')
}
}
像下面这么写,开辟10个实例,都会共用一个eat方法
function Person(name) {
this.name = name;
}
Person.prototype.eat=function () {
console.log('eat')
}