📅  最后修改于: 2023-12-03 14:45:40.672000             🧑  作者: Mango
在JavaScript中,我们通常需要创建类的实例对象。如果我们需要创建许多相似的对象,每个对象都有相同的属性和方法,那么使用原型模式可以显著减少代码量并提高性能。原型是定义了对象初始状态的对象,它包含类的所有共有属性和方法,可以通过原型链进行访问。本文将讨论如何使用原型模式来创建多个相似对象。
定义一个原型类:
function PrototypeClass(name) {
this.name = name;
}
PrototypeClass.prototype.getName = function () {
return this.name;
};
现在,您可以通过使用new
运算符创建一个新的对象实例:
var prototypeObj = new PrototypeClass('prototype object');
该prototypeObj
对象与PrototypeClass
对象遵循原型链。这意味着共享原型上的任何属性和方法:
console.log(prototypeObj.getName()); // 输出 'prototype object'
现在,我们可以通过Object.create()
方法创建另一个实例对象:
var newObj = Object.create(prototypeObj);
在这种情况下,newObj
将获得prototypeObj
原型上的所有属性和方法:
console.log(newObj.getName()); // 输出 'prototype object'
每个JavaScript对象都具有与之关联的原型。这个原型对象又有关联的原型,形成原型链,直到最终的原型链指向Object.prototype
,null
或其他内置对象的方法和属性。让我们来看看一个例子:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.getAge = function () {
return this.age;
};
function Employee(name, age, position) {
Person.call(this, name, age);
this.position = position;
}
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.getPosition = function () {
return this.position;
};
var employee1 = new Employee('John', 30, 'Developer');
console.log(employee1.getName()); //不输出
console.log(employee1.getAge()); // 输出 30
console.log(employee1.getPosition()); // 输出 'Developer'
在这个例子中,我们定义了两个构造函数:Person
和Employee
。Employee
继承了Person
的原型。这意味着Employee
实例对象也继承了Person
的属性和方法。它还向Employee
的原型添加了一个新的方法getPosition()
。因此,employee1
对象可以访问自己的属性和方法和它所继承对象的属性和方法:
console.log(employee1.getName()); // 不输出,因为该方法未定义
console.log(employee1.getAge()); // 输出 30
console.log(employee1.getPosition()); // 输出 'Developer'