求助大佬,关于 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)