Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript通过prototype访问私有属性_Javascript_Constructor_Prototype - Fatal编程技术网

Javascript通过prototype访问私有属性

Javascript通过prototype访问私有属性,javascript,constructor,prototype,Javascript,Constructor,Prototype,这是一个相当愚蠢的例子,但它明确地描述了我经常遇到的问题。我有这样的构造函数: function Pagination() { var page = 1; } 然后我想给它的原型分配方法: (function () { this.page = function () { // Here goes code }; }).call(Pagination.prototype); 有什么办法可以得到那块私有财产吗。不,“私有属性”是通过功能范围实现的,并且无法改变功能范围的工

这是一个相当愚蠢的例子,但它明确地描述了我经常遇到的问题。我有这样的构造函数:

function Pagination() {
  var page = 1;
}
然后我想给它的原型分配方法:

(function () {
  this.page = function () {
      // Here goes code
  };
}).call(Pagination.prototype);

有什么办法可以得到那块私有财产吗。不,“私有属性”是通过功能范围实现的,并且无法改变功能范围的工作方式。仔细考虑一下,你是否真的需要这些财产是“私人”的,以及为什么。2.这是一个奇怪的向后弯曲的原型在那里。@deceze嗯,我认为最好将所有方法移到它的原型中,而不是将它们保留在构造函数中。但另一方面,我仍然需要封装。有什么建议吗?“私有”属性和原型在Javascript中根本不匹配。在这种情况下,我一直在重复的一件事是:你到底为什么“需要”这样的封装?@deceze我正在创建逻辑,它将在将来被重用几次,而且我不是唯一一个参与该项目的人。因此,我希望提供尽可能多的接口,使其能够按预期工作。通常,“我们都是同意在这里的成年人”的方法应该足够了,您可以命名您的私人财产
\u page
或类似的名称,并同意不触摸这些财产。也许更好:使用TypeScript并将它们标记为
private
,这样tsc就会抛出错误。如果您需要变得如此防御性,以至于需要“实际上”使属性不可访问,那么您的起点就不好了。