Как я могу получить доступ к объекту JS, который я определил? - PullRequest
4 голосов
/ 06 октября 2011

У меня есть следующий объект:

var IOBreadcrumb = {
    breadcrumbs: [],

    add: function(title, url){
      var crumb = {
        title: title, 
        url:url
      };
      this.breadcrumbs.push(crumb);
    }
  };

Как я могу получить доступ к объекту?

var breadcrumb = new IOBreadcrumb();
breadcrumb.add('some title','some url');
console.log(breadcrumb.breadcrumbs);

Дает мне ошибку Uncaught Type Error: object is not a function.

Ответы [ 4 ]

3 голосов
/ 06 октября 2011

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

var IOBreadcrumb = function IOBreadcrumb() {
  this.breadcrumbs = [];
  this.add = function(title, url) {
    var crumb = {
      title: title, 
      url:url
    };
    this.breadcrumbs.push(crumb);
  };
};

В качестве альтернативы вы также можете воспользоваться преимуществом прототипа здесь и поделиться определением add в нескольких случаях

var IOBreadcrumb = function IOBreadcrumb() {
  this.breadcrumbs = [];
};

IOBreadcrumb.prototype.add = function (title, url) {
  var crumb = {
    title: title, 
    url:url
  };
  this.breadcrumbs.push(crumb);
};
0 голосов
/ 06 октября 2011
function createIOBreadcrumb() {
    return {
        breadcrumbs: [],

        add: function(title, url) {
            var crumb = {
                title: title, 
                url:url
            };
            this.breadcrumbs.push(crumb);
        };
    };
}


var breadcrumb = createIOBreadcrumb();
0 голосов
/ 06 октября 2011

Использование IOBreadcrumb.add('some title','some url');

В настоящее время IOBreadcrumb является объектом со статической функцией add.Если вы хотите создать экземпляр IOBreadcrumb, вы бы сделали его функцией.

var IOBreadcrumb = function() {
  this.breadcrumbs = [];
  this.add = function(title, url) {
    this.breadcrumbs.push({
      title: title,
      url: url
    });
  };
};

var breadcrumb = new IOBreadcrumb();
breadcrumb.add('some title','some url');
0 голосов
/ 06 октября 2011
function IOBreadcrumb() {
    var breadcrumbs = [];

    this.add = function(title, url){
      var crumb = {
        title: title, 
        url:url
      };
      breadcrumbs.push(crumb);
    }
  };

Должен делать это, в буквальном смысле, это не функция;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...