Squeak.ru - шаблоны программирования

Javascript - невозможно создать несколько экземпляров одного и того же объекта

Я пытаюсь создать несколько экземпляров одного и того же объекта. Первый экземпляр работает нормально, но когда я пытаюсь инициализировать другой объект, я получаю эту ошибку,

Uncaught TypeError: Object #<draw> has no method 'width'

вот скрипта, и вот мой код:

function halo() {
  var width = 720, // default width
      height = 80; // default height

  function draw() {
    // main code
    console.log("MAIN");
  }

  draw.width = function(value) {
    if (!arguments.length) return width;
    width = value;
    return draw;
  };

  draw.height = function(value) {
    if (!arguments.length) return height;
    height = value;
    return draw;
  };

  return draw;
}

var halo = new halo();
halo.width(500);

var halo2 = new halo();
halo2.width(300);

Таким образом, моя цель - создать несколько экземпляров одного и того же «класса».

22.03.2013

Ответы:


1

Вы переопределяете halo cunstructor:

var halo = new halo(); // <-- change variable name to halo1
halo.width(500);

var halo2 = new halo();
halo2.width(300);

Исправленная версия: http://jsfiddle.net/GB4JM/1/.

22.03.2013
  • Разве это не должно быть return new draw внизу halo? 22.03.2013
  • Нет, в данном случае это не то, что нам нужно. return draw точно так же, как если бы это было return {width: function() {}, height: function() {}}. 22.03.2013
  • Гааааа! Конечно. Спасибо, не знаю, как я это пропустил. Javascript ООП требует некоторого привыкания. 22.03.2013

  • 2

    Я бы предложил что-то более структурированное:

    Halo = (function() {
      function Halo(width, height) {
        this.width = width || 720; // Default width
        this.height = height || 80; // Default height
      }
    
      Halo.prototype = {
        draw: function() {
          // Do something with this.width and this.height
        }
      };
    
      return Halo;
    })();
    
    var halo = new Halo(500, 100);
    halo.draw();
    
    var halo2 = new Halo(300, 100);
    halo2.draw();
    
    22.03.2013
  • Почему ты это сказал? Каковы были бы преимущества этого способа по сравнению с тем, как я делаю это сейчас? 22.03.2013
  • @Джон, это стандартный способ делать классные вещи. Это позволяет другим людям лучше понимать ваш код и упрощает его включение в другой код. Например, если вы позже решите использовать наследование, это позволит вам работать с существующими платформами, учебными пособиями и руководствами. Вам не нужно этого делать, это обычно предпочтительнее (и почему я запутался в вашем коде). 25.03.2013
  • Ок, понял. Спасибо, что нашли время, чтобы объяснить это. Вы не знаете никаких хороших учебных ресурсов по этой теме, не так ли? Я мог бы просто поискать в Google, но есть довольно много статей, в которых говорится, что их метод лучший, и трудно понять, какому стандарту следовать. :/ 27.03.2013
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...