必发365怎么登录不了:ES5 模拟 ES6 的 Symbol 实现私有成员功能示例

这篇文章主要先容了ES5模拟ES6的Symbol实现私有成员功能,结合实例形式阐发了ES5模拟ES6的Symbol实现私有成员功能相关道理、实现措施与操作留意事变,必要的同伙可以参考下本文实例讲述了ES5模拟ES6的Symbol实现私有成员功能。分




这篇文章主要先容了ES5 模拟 ES6 的 Symbol 实现私有成员功能,结合实例形式阐发了ES5 模拟 ES6 的 Symbol 实现私有成员功能相关道理、实现措施与操作留意事变,必要的同伙可以参考下

本文实例讲述了ES5 模拟 ES6 的 Symbol 实现私有成员功能。分享给大年夜家供大年夜家参考,详细如下:

ES6 中有类语法,定义类变得简单了

class Person {

constructor(name) {

this._name = name;

}

get name() {

return this._name;

}

}

然而,并没有供给私有属性。比如上面的 Person 着实是盼望在构造的时刻传入 name,之后不容许改动了。不过,因为没有私有属性,以是难免有人会这样干:

Person james = new Person("James");

james._name = "Tom";// God Save Me

不过,假如想定义私有成员,也有变通的要领,比如广为留传的 Symbol 大年夜法

var Person = (function() {

let _name = Symbol();

class Person {

constructor(name) {

this[_name] = name;

}

get name() {

return this[_name];

}

}

return Person;

})();

其实质在于匿名函数中的 Symbol 实例 _name 是局部变量,在外部弗成造访。而 Symbol 因为自身的独一性特征,也没法再造一个相同的出来,以是就模拟出来一个私有成必发365怎么登录不了员了。

按照此思路,在 ES5 中着实也很轻易模拟私有成员。局部变量是很轻易做到的,在函必发365怎么登录不了数范围内 let 和 var 是一样的效果。问题在于模拟 Symbol 的独一性。

ES5 没有 Sybmol,属性名称只可必发365怎么登录不了能是一个字符串,假如我们能做到这个字符串弗成预感,那么就基础达到目标。要达到弗成预期,一个随机数基础上就办理了。

var Person = (function() {

var _name = "00" + Math.random();

function Person(name) {

this[_name] = na必发365怎么登录不了me;

}

Object.defineProperty(Person.prototype, "name", {

get: func必发365怎么登录不了tion() {

return this[_name];

}

});

return Person;

})();

假如这个法度榜样在 Web 页面中加载,那么每次刷新页面 _name 的值都邑不合,但并不会影响法度榜样的逻辑,外部法度榜样不会呈现任何不适。

然而与 Symbol 规划比拟,它的问题在于这个 _name 的值不会像 Symbol 一样会暗藏起来,在节制台可以用很多种法子把它找出来——当然在调试阶段这样做也没什么弗成以。在开拓阶段这个值仍旧是弗成预感的。

对付单个私有属性的环境,有人会找到私有 Key 的规律,比如上面的私有 Key 便因此 "000." 开始的,遍历工具属性很轻易找出来。在多个私有 Key 的环境下,也可以经由过程一些技巧手段来找,比如

function getPersonNameKey() {

var v = "" + Math.random();

var p = new Person(v);

for (var k in p) {

if (p[k] === v) {

return k;

}

}

}

但这些都是后话,做起来太费劲,一样平常人不会这么干。何况 Symbol 也是可以遍历的(经由过程 Object.getOwnPropertySymbols()),完全可以以同样的措施来获取私有 Key。

综上,ES5 中模拟 Symbol 来实现私有属性的目的已经达到了。

感兴趣的同伙可以应用在线HTML/CSS/JavaScript代码运行对象:测试上述代码运行效果。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》及《》

盼望本文所述对大年夜家JavaScript法度榜样设计有所赞助。

发表评论
加载中...

相关文章