Gemasoft Asked: 2020-01-04 13:41:45 +0800 CST 2020-01-04 13:41:45 +0800 CST 2020-01-04 13:41:45 +0800 CST JavaScript 中的原型是什么,它们的用途是什么? 772 我想知道什么是JavaScript 中的原型以及如何使用它们或者是否有任何好处。 javascript 3 Answers Voted Best Answer learnercys 2020-01-04T18:16:05+08:002020-01-04T18:16:05+08:00 作为初始说明,OOP基于原型而不是类。JavaScript要查看有关prototype-based OOPvs的更多信息。class-based OOP您可以访问以下链接(英文)。 原型是一组用于将面向对象编程集成到JavaScript. 因此,遵循这些规则,我们应该能够创建不同的面向对象方法: 遗产 封装 抽象 多态性 当然,并非所有方法都可用。 如何使用原型? ECMAScript 5 要创建一个类: function Polygon(height, width){ this.height = height; this.width = width; } 从基类继承: function Square(side){ this.prototype = Object.create(Polygon.prototype); Polygon.call(this, side, side); this.getArea = function(){ return this.height * this.width; } } ECMAScript 6 要创建一个类: class Polygon { constructor(height, width) { this.height = height; this.width = width; } } 从基类继承: class Square extends Polygon { constructor(side) { super(side, side); } getArea() { return this.height * this.width; } } 有了这个,我们可以创建一个实例: var square = new Square(5); // debe imprimir 25 console.log(square.getArea()); 示例取自继承和原型链。 好处 有高级编程。 有不同的方法来创建对象。 继承属性和方法。 基本上,拥有原型的好处JavaScript是可以使用面向对象编程作为一种软件方法。 enrique7mc 2020-01-04T19:09:25+08:002020-01-04T19:09:25+08:00 JavaScript 中的所有对象都有一个称为 的特殊属性prototype,它是对另一个对象的引用。 它有什么用呢?让我们看一个例子: var miObjeto = { foo: 5 } console.log(miObjeto.foo); // 5 这里我们创建一个名为 的对象miObjeto,定义一个foo值为 5 的属性并打印该变量的值。显然结果是 5,但是当对象没有变量时会发生什么foo?JavaScript 将尝试在prototype这个对象的名称中找到它,依此类推,直到找到它或到达原型链的末尾。 这个原型链允许我们模拟继承(请记住,在 JavaScript 中没有基于类的继承),如果我们想为对象添加方法或属性,我们可以通过prototype. 让我们考虑以下函数Persona: function Persona(nombre, edad) { this.nombre = nombre; this.edad = edad; } 这个函数的原型是Persona.prototype,我们可以向它添加比原来更多的方法或属性: Persona.prototype.toString = function() { return "[Persona: " + this.nombre + "]"; } Persona.prototype.saludar = function() { console.log("Hola mi nombre es: " + this.nombre); } 现在我们要创建一个 with 类型的对象,p此时的原型是相等的:PersonanewpPersona.prototype var p = new Persona("John", 33); console.log(p.nombre); // propiedad del objeto console.log(p.toString()); // propiedad no encontrada directamente en el objeto 出于这个原因,当调用该方法时,toString即使它不是 的直接方法p,JavaScript 也会查看 的原型,p它确实找到了它,并且一切正常。 Object.getPrototypeOf对于我们的特殊情况,我们可以随时使用 查询对象的原型: Object.getPrototypeOf(p) === Persona.prototype; // true 最后,需要注意的是,有一个用于获取对象原型的非标准__proto__属性称为,但应避免使用它。 Simon Puente 2020-01-04T15:20:54+08:002020-01-04T15:20:54+08:00 原型是可以具有属性(函数和方法)的对象,它们也可以被其他对象用来继承它们的属性,这对于封装和重用代码非常有用,这使您可以使代码适应用户-面向设计、对象。 在 JavaScript 中,所有不是原始类型(undefined、null、或)的东西都是对象boolean,可以用作创建其他对象的原型。numberstring
作为初始说明,OOP基于原型而不是类。
JavaScript
要查看有关prototype-based OOP
vs的更多信息。class-based OOP
您可以访问以下链接(英文)。原型是一组用于将面向对象编程集成到
JavaScript
. 因此,遵循这些规则,我们应该能够创建不同的面向对象方法:当然,并非所有方法都可用。
如何使用原型?
ECMAScript 5
要创建一个类:
从基类继承:
ECMAScript 6
要创建一个类:
从基类继承:
有了这个,我们可以创建一个实例:
示例取自继承和原型链。
好处
JavaScript
是可以使用面向对象编程作为一种软件方法。JavaScript 中的所有对象都有一个称为 的特殊属性
prototype
,它是对另一个对象的引用。它有什么用呢?让我们看一个例子:
这里我们创建一个名为 的对象
miObjeto
,定义一个foo
值为 5 的属性并打印该变量的值。显然结果是 5,但是当对象没有变量时会发生什么foo
?JavaScript 将尝试在prototype
这个对象的名称中找到它,依此类推,直到找到它或到达原型链的末尾。这个原型链允许我们模拟继承(请记住,在 JavaScript 中没有基于类的继承),如果我们想为对象添加方法或属性,我们可以通过
prototype
.让我们考虑以下函数
Persona
:这个函数的原型是
Persona.prototype
,我们可以向它添加比原来更多的方法或属性:现在我们要创建一个 with 类型的对象,
p
此时的原型是相等的:Persona
new
p
Persona.prototype
出于这个原因,当调用该方法时,
toString
即使它不是 的直接方法p
,JavaScript 也会查看 的原型,p
它确实找到了它,并且一切正常。Object.getPrototypeOf
对于我们的特殊情况,我们可以随时使用 查询对象的原型:最后,需要注意的是,有一个用于获取对象原型的非标准
__proto__
属性称为,但应避免使用它。原型是可以具有属性(函数和方法)的对象,它们也可以被其他对象用来继承它们的属性,这对于封装和重用代码非常有用,这使您可以使代码适应用户-面向设计、对象。
在 JavaScript 中,所有不是原始类型(
undefined
、null
、或)的东西都是对象boolean
,可以用作创建其他对象的原型。number
string