向函数添加原型意味着什么

What does it mean to add a prototype to a function?

本文关键字:意味着 什么 原型 添加 函数      更新时间:2023-09-26

给定:

var x = function () {
};  
x.prototype = { abc: 25 };

有人能向我解释一下这意味着什么吗。这能在没有.protype的函数内完成吗?

var x = function () {
  // something here ?
};

原型是类模型在JavaScript中的工作方式-您创建了一个类x,它的属性abc默认为25:

var obj = new x();
alert(obj.abc);   // 25

函数x是类构造函数,它在创建该类的新实例时被调用,并可以对其进行初始化。这当然意味着你可以在那里设置abc属性:

var x = function()
{
  this.abc = 25;
};
var obj = new x();
alert(obj.abc);   // 25

然而,这被认为是效率较低的方法:

  • 您必须操作创建的每个对象,而不是永远在原型上设置属性
  • 该属性存储在每个对象上,每次都消耗内存,而不是在原型上存储一次

ECMAScript Harmony有一个更好的语法来定义类和原型,但这个语法还没有在任何浏览器中实现:

class x {
  constructor() {
    ...
  }
  public abc = 25;
}

这相当于您的代码定义了原型,只是对相关操作进行了更好的分组。