将原型添加到函数中意味着什么?

时间:2014-06-27 06:36:08

标签: javascript

假设:

var x = function () {

};  
x.prototype = { abc: 25 };

有人可以向我解释这意味着什么。这可以在没有.prototype的函数内完成吗?

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

1 个答案:

答案 0 :(得分:2)

原型是类模型在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有nicer syntax用于定义类和原型,但是这个尚未在任何浏览器中实现:

class x {
  constructor() {
    ...
  }

  public abc = 25;
}

这相当于定义原型的代码,只是将相关操作分组得更好。