Класс Javascript, конструктор и начальное значение

#javascript

#javascript

Вопрос:

Справка по приведенному ниже запросу помогла бы мне приступить к работе и прояснить многие сомнения. До сих пор я читал, что мог бы иметь класс в JS с помощью операторов функций и нотации JSON для хранения значений объектов. Итак, в приведенном ниже коде

  1. как написать переменную testData, которая содержит некоторые значения формы
  2. как инициализировать объекты Shape из testData. Возможно, я смогу создать объект, назначив каждому члену

     var obj = {
                x: testData[i].x,
                  y: testData[i].y,
                ...      
            };
      

правильно ли это, или мы можем использовать конструкторы, как описано здесь

 var testData = [ {}, {} ]


//Shape class

var Shape = function(x, y, w, h) {
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;
        this.calculateArea = function() {
            alert("Area..");
};


func test() {
var arr = [];
for (var i=0,l=testData.length; i<l; i  ) {
       var s = testData[i];
           var obj = // how to construct Shape object here  through constructor          
        };
arr.push(obj);

}
  

Комментарии:

1. JSON != object literals . В вашем коде вообще нет JSON.

2. Да .. Алекс упоминал ниже то же самое .. все еще знакомлюсь с новым для меня языком

Ответ №1:

Вы можете создать новый объект ( Shape , в данном случае) с new ключевым словом. Итак, вы бы использовали:

 var obj = new Shape(testData[i].x, testData[i].y, testData[i].w, testData[i].h);
  

Комментарии:

1. значит, явное объявление конструктора не требуется? и нужно ли мне указывать все параметры, или они работают перегруженным образом (скажем, не указывая элемент функции или параметр h)?

2.В javascript function является конструктором. Предполагая, что вы пришли с Java, функции javascript не могут быть перегружены. Если бы вы вызывали Shape(x, y, w) , h было бы undefined , но не выдало ошибку. Однако вы можете использовать условные проверки внутри конструктора, чтобы воспроизвести последствия перегрузки. вот отличное руководство по javascript ООП.

Ответ №2:

Предполагая, что вам нужны тестовые данные в формате JSON для передачи с сервера и т.д.

 testData = [{ x: 1, y: 1, w: 1, h: 1}, ...]
  

Затем, как предлагает @digitalFish, вы можете создавать объекты Shape из каждого элемента тестовых данных с помощью

 var obj = new Shape(s.x, s.y, s.w, s.h);
arr.push(obj);
  

Ответ №3:

new Оператор позволяет вам создать экземпляр объекта через его конструктор.

 var circle = new Shape(x, y, width, height);
  

Кроме того, это не называется JSON нотацией (которая была бы обозначением объектов JavaScript), это называется литеральной нотацией объекта.

Ответ №4:

Оператор new может вызвать проблемы в некоторых крайних случаях, когда требуется .apply. Я считаю, что лучший метод, как показано ниже. Это также немного сложнее, поскольку вы не повторяете «это» повсюду.

 var createShape = function(x, y, w, h) {
    return {
        x: x,
        y: y,
        w: w,
        h: h,
        calculateArea: function() {
            alert("Area..");
        }
    };
};
var a = createShape(1,2,3,4);
var b = createShape(4,3,2,1);
console.log(a, b);