一、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
方法供两个对象使用;
在程序运行过程中,每多创建一个方法,都要消耗一定的内存;而原型对象中的方法,可以帮我们节省这些因频繁创建方法而消耗的内存;
网友评论