首页 > Web开发 > 详细

js实现私有属性

时间:2020-10-08 18:44:10      阅读:52      评论:0      收藏:0      [点我收藏+]

第一种方式:

用一个下划线或字符串的方式

var User = (function () {
	let _name = `_name`
	// 或者 let _name = ‘m24OR98kORawm1314520‘
	function User(name) {
		this[_name] = name;
	}

	User.prototype.getName = function () {
		return this[_name];
	};

	return User;
}());

缺点:并不是真正意义上的私有,依然可以使用Object.keys()Object.getOwnPropertyNames()JSON.stringify获取到属性

第二种方式:

使用闭包

var User = (function() {
    function User(name) {
        this.getName = function() {
            return name;
        };
    }

    return User;
}());

缺点:是真正的私有,但是实例无法共享方法,浪费内存空间

第三种方式:

使用Symbol

var User = (function () {
	var nameSymbol = Symbol(‘name‘);

	function User(name) {
		this[nameSymbol] = name;
	}

	User.prototype.getName = function () {
		return this[nameSymbol];
	};

	return User;
}());

缺点:会被Object.getOwnPropertySymbols获取到属性,进而修改该属性对应的值(Symbol 作为属性名,该属性不会出现在for...infor...of循环中,也不会被Object.keys()Object.getOwnPropertyNames()JSON.stringify()返回。但是,有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有 Symbol 属性名。)

第四种方式:

基于闭包+map的实现

var User = (function () {
	var map = new Map();

	function User(name) {
		map.set(this, name);
	}

	User.prototype.getName = function () {
		return map.get(this);
	};

	return User;
}());

js实现私有属性

原文:https://www.cnblogs.com/Mr-O-o-Lee/p/13781362.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!