Prototype(原型对象)学习

2022-10-18  本文已影响0人  fanren

一、Prototype(原型对象)

js中的每一个对象,都有一个原型对象;
Data对象有一个原型对象Data.prototype;
Array对象有一个原型对象Array.prototype;
同理,我们自定义的一个类的对象,也有它对应的原型对象

// 定义一个Person类
const Person = function (name, age) {
    this.name = name;
    this.age = age;
    this.getAge = function (){
        return this.age;
    }
}
// 原型
Person.prototype = {
    getUserName: function() {
        return this.name;
    }
}
// 创建一个实例对象
let person1 = new Person('zhangsan', 16)
console.log(person1);
结果

根据上述的结果,我们可以看出,对象person1里有一个属性[[Prototype]],该属性是一个Object(对象),它有一个方法getUserName是我们在Person.prototype中定义的方法;
而该[[Prototype]]属性,就是对象person1的原型对象;

二、原型对象的作用

对象可以调用它原型对象的一切属性和方法;

let person1 = new Person('zhangsan', 16)
console.log(person1.getUserName());
结果

三、原型对象的优势

给一个类定义属性和方法,可以直接在类中定义,也可以在原型中进行定义;
那原型又有什么优势呢?先看以下的例子

let person1 = new Person('zhangsan', 16)
let person2 = new Person('lisi', 17);

console.log('getAge',person1.getAge == person2.getAge);
console.log('getUserName', person1.getUserName == person2.getUserName);
结果

两个不同的对象,getAge是类中定义的方法,而getUserName是原型中定义的方法;
创建了两个对象的过程,给每个对象都创建了getAge方法,却只创建了一个getUserName方法供两个对象使用;
在程序运行过程中,每多创建一个方法,都要消耗一定的内存;而原型对象中的方法,可以帮我们节省这些因频繁创建方法而消耗的内存;

上一篇 下一篇

猜你喜欢

热点阅读