跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 求助大佬,关于 JavaScript 中 new fun() 的私有属性的问题。
未分類
8 7 月 2020

求助大佬,关于 JavaScript 中 new fun() 的私有属性的问题。

求助大佬,关于 JavaScript 中 new fun() 的私有属性的问题。

資深大佬 : imdong 7

在一个页面中,同一个对象会被创建多个实例,同时这些实例是相互独立运行的。

但是实例中有一些私有属性不想对外暴露,而且每个实例间属性也是独立的。

大概应该是这样

let Obj = function(n){     this.num = n + Math.random(); }; Obj.prototype.get = function(){     console.log(this.num); }  let a = new Obj(1),     b = new Obj(2);  a.get(); // 1.xxx b.get(); // 2.xxx  // 且满足如下 console.log(a.num); // undefined console.log(b.num); // undefined 

目前能想到的办法只有如下这样似乎非常不优雅的方法。

(function (window) {     /**      * 创建一个私有的数据存储方法      */     let data = [],         dataBucket = function () {             if (!this instanceof Obj) {                 return null;             }             return data[this.data_id];         }      let obj = function (n) {         this.data_id = data.length + 1;         data[this.data_id] = {};          this.data().num = n + Math.random();     };     // 映射读写到私有方法上     obj.prototype.data = function () {         return dataBucket.call(this);     }      obj.prototype.get = function () {         console.log(this.data().num);     }      window.Obj = obj; })(window);  let a = new Obj(1),     b = new Obj(2);  a.get(); // 1.xxx b.get(); // 2.xxx 

所以,大佬们,有没有更好的方法???

或者是原生有方法,是我太菜不知道呢?

求鞭打…

======= 更新,发完贴有检查了一下,发现 a.data() 依然可以访问,崩溃了…

大佬有話說 (1)

  • 資深大佬 : zhyl

    用闭包就行了。具体的就是在构造函数里直接定义 getter,getter 访问局部变量构成一个闭包。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具