📜  Prototype-模板(1)

📅  最后修改于: 2023-12-03 14:45:40.672000             🧑  作者: Mango

Prototype-模板

在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'

在这个例子中,我们定义了两个构造函数:PersonEmployeeEmployee继承了Person的原型。这意味着Employee实例对象也继承了Person的属性和方法。它还向Employee的原型添加了一个新的方法getPosition()。因此,employee1对象可以访问自己的属性和方法和它所继承对象的属性和方法:

console.log(employee1.getName()); // 不输出,因为该方法未定义
console.log(employee1.getAge()); // 输出 30
console.log(employee1.getPosition()); // 输出 'Developer'
参考