Ajax Javascript中的对象参数

Ajax Javascript中的对象参数,ajax,properties,jquery,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 = func

我的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时,它会被设置回。

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

<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>
这是因为entityId变量是函数的局部变量,与最后创建的对象无关。相反,将对象中的所有内容放在末尾,而不是函数中的局部变量

例如


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

当封闭方法时,每次实例化都会浪费内存

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

是的,我意识到我可以把entityId传给doStuff,但这不是我的目的。你这样做让所有私有方法都公开了是的。这是个问题吗?在JavaScript中,一切都是公开的,fwiw。这只是为了说明问题中的范围界定问题。如果有关于私有方法的问题,那么可以毫无困难地将这些方法移出对象。最糟糕的情况是,您只需要从公共方法内部向他们传递一些额外的内容。我不明白这怎么会让我的答案错。@thenduks说JavaScript中的所有内容都是公共的是。。。大体上是正确的。但是,有点误导。如果有人对我说,关于一种语言,这将意味着根本没有封装,所有变量和属性都是公共的。但JavaScript中并非如此。您可以通过使用闭包来获得私有函数和变量——我的意思是,这不是Java或者可以阻止库用户访问私有方法的东西。用户可以用JavaScript代码做任何他们想做的事情,因此,在实践中,担心事情私有化是毫无意义的。除此之外,大部分和这部分代码都与它所使用的页面紧密相关。。。这没什么大不了的。更改输入参数的名称成功了,谢谢。
ClassName.prototype.methodname = function(){ ... }