Ajax Javascript中的对象参数
我的javascript对象有点问题。我想做的是传入一个id,并让它设置一个可供我的所有函数访问的变量 以下是我所拥有的一个小样本: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
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(){ ... }