【JS】漫谈原型-2.作用

原型在开发过程中有什么作用?

答:共享数据

举例说明:

 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')
    }
发布了47 篇原创文章 · 获赞 4 · 访问量 7462

猜你喜欢

转载自blog.csdn.net/weixin_39370093/article/details/102565638