Javascript:轻量级数据保持器的原型表示

Javascript:轻量级数据保持器的原型表示,javascript,Javascript,我正在阅读关于面向对象的JS,并试图了解基于原型的继承在我的案例中是否是最好的。我刚刚读了Eric Elliot关于这种方法优于经典模式的文章 在我的例子中,我必须建模,比如说10000个名为Shape的类型或类的实例。我需要每个对象保持它的状态,比如说size。使用克隆来扩展原型(Eric文章中的第二种方法)会导致这些方法也克隆吗??以他为例, var proto = { hello: function hello() { return 'Hello, my name is ' +

我正在阅读关于面向对象的JS,并试图了解基于原型的继承在我的案例中是否是最好的。我刚刚读了Eric Elliot关于这种方法优于经典模式的文章

在我的例子中,我必须建模,比如说10000个名为
Shape
类型或类的实例。我需要每个对象保持它的状态,比如说
size
。使用克隆来扩展原型(Eric文章中的第二种方法)会导致这些方法也克隆吗??以他为例,

var proto = {
  hello: function hello() {
    return 'Hello, my name is ' + this.name;
  }
};

var george = _.extend({}, proto, {name: 'George'});
在上述情况下,创建10000个实例是否会将hello克隆到所有实例中

如果是这样的话,对我来说什么是最好的方法。我的
type/class
包含10个基本值,更多的是作为数据的持有者,而不是抽象行为。要求,

  • 每个实例都保留私有数据
  • 有一些常用的方法来获取/设置这些数据(或只是属性)
  • 易于转换为Json
  • 在上面的代码中,您正在使用(您需要下划线库)方法。如果您创建这样的对象

    for (var i = 0; i < 1000; i ++) {
     var obj = _.extend({}, proto, {name: 'George'});
    }
    
    {
      {name: 'George'},
      hello: function hello() {
        return 'Hello, my name is ' + this.name;
      }
    };
    
    但下面两个方法在所有1000个对象中共享相同的hello函数。因此,根据你的意愿选择其中任何一个

    经典方法。

    var proto = function (name) {this.name = name || ""};
    
    proto.prototype.hello = function hello() {
        return 'Hello, my name is ' + this.name;   }
    
    var p2 = new proto({name: "george"});
    
    p2.hello() //"Hello, my name is george"
    
    使用Object.create()

    在开始使用之前,您应该有清楚的了解。它仅在现代浏览器上受支持。下面的链接可以帮助您更好地理解这一点

    ,

    在上面的代码中,您正在使用(您需要下划线库)方法。如果您创建这样的对象

    for (var i = 0; i < 1000; i ++) {
     var obj = _.extend({}, proto, {name: 'George'});
    }
    
    {
      {name: 'George'},
      hello: function hello() {
        return 'Hello, my name is ' + this.name;
      }
    };
    
    但下面两个方法在所有1000个对象中共享相同的hello函数。因此,根据你的意愿选择其中任何一个

    经典方法。

    var proto = function (name) {this.name = name || ""};
    
    proto.prototype.hello = function hello() {
        return 'Hello, my name is ' + this.name;   }
    
    var p2 = new proto({name: "george"});
    
    p2.hello() //"Hello, my name is george"
    
    使用Object.create()

    在开始使用之前,您应该有清楚的了解。它仅在现代浏览器上受支持。下面的链接可以帮助您更好地理解这一点


    这是Eric给出的一个大致相同的答案。无论如何,上面看起来更简单。这是Eric给出的一个大致相同的答案。总之,上面看起来更简单。可以使用主干库吗?对不起,我不使用主干。我确实使用jQuery,但想知道更多的东西可以在纯javascript中使用。可以使用主干库吗?对不起,我不使用主干。我确实使用jQuery,但想知道更多的是如何在纯javascript中使用jQuery。