Javascript中的对象参数

时间:2009-10-14 17:54:11

标签: ajax properties jquery

我的javascript对象有点问题。我想要做的是传入一个id并让它设置一个可供我所有函数访问的变量。

以下是我所拥有的一小部分样本:

var myObject = function() {
    var pageSize = 6;
    var currentPage = 1;
    var pagerPagesVisible = 5;
    var pagerId = '#my-pager';
    var entityId = '';

    var doStuff = function() {

        var endIndex = pageSize * currentPage;
        var startIndex = endIndex - pageSize;

        $.ajax({ type: "GET", url: "/items/" + this.entityId + "/entities/" + startIndex + "/" + pageSize + "/", dataType: "json", success: loadData, cache: false,
            error: function(response, status, error) {
                alert(response.responseText);
            }
        });

    };

    var loadData = function(data) {
        var itemCount = data.length;

        //build the html and write to the page

        buildPager(itemCount);
    };


    var buildPager = function(itemCount) {

        pager.build(pagerId, pageSize, itemCount, currentPage);

    };

    var attachEvents = function() {
        //attach events to the pager
    };

    return {

        init: function(entityId) {
            this.entityId = entityId;

            doStuff();
        }
    }
} ();

问题是,在init中,它设置了您在顶部看到的entityId实例。但当它命中时,doStuff()将entityId设置回''。

3 个答案:

答案 0 :(得分:1)

您正在混合闭包和对象样式 - 您需要保持一致:

<script>

var myObject = function() {
    var pageSize = 6;
    var currentPage = 1;
    var pagerPagesVisible = 5;
    var pagerId = '#my-pager';
    var entityId = '';

    var doStuff = function() {
        alert(entityId);
    };

    return {

        init: function(myEntityId) {
            entityId = myEntityId;

            doStuff();
        }
    }
} ();

myObject.init(123);

</script>

答案 1 :(得分:0)

其他人在这里回答了你的问题,但我想指出,如果要创建许多这些对象,你可能想要使用原型。

当你附上你的方法时,你会在每个实例化中浪费内存。

ClassName.prototype.methodname = function(){ ... }

答案 2 :(得分:-1)

这是因为entityId变量是函数的本地变量,与您在最后创建的对象无关。相反,将所有内容放在该对象的末尾而不是函数中的本地。

例如

var myObject = function() {
  var pageSize = 6;
  var currentPage = 1;
  var pagerPagesVisible = 5;
  var pagerId = '#my-pager';

  return {
    doStuff: function() {
      var endIndex = pageSize * currentPage;
      var startIndex = endIndex - pageSize;
      var self = this;

      $.ajax( {
        type: "GET",
        url: "/items/" + this.entityId + "/entities/" + startIndex + "/" + pageSize,
        dataType: "json",
        success: function() { self.loadData(); },
        cache: false,
        error: function(response, status, error) {
          alert(response.responseText);
        }
      } );
    },
    loadData: function(data) {
      var itemCount = data.length;
      this.buildPager(itemCount);
    },
    buildPager = function(itemCount) {
      pager.build(pagerId, pageSize, itemCount, currentPage);
    },
    attachEvents: function() {
      //attach events to the pager
    },
    entityId: '',
    init: function(entityId) {
      this.entityId = entityId;
      this.doStuff();
    }
  };
}();