javascript高级程序设计阅读收获(10.6.1)——静态私有变量

(function(){
	let privateVariable = 10;
	function privateFunction(){
		return false;
	}

	MyObject = function(){};

	MyObject.prototype.publicMethod = function(){
		privateVariable++;
		return privateFunction();
	};
})();
  1. 在这个模式中,匿名函数表达是创建了一个包含构造函数及其方法的私有作用域。首先定义的是私有变量和私有函数,然后又定义了构造函数和公有方法。共有方法定义在构造函数的原型上,与典型的原型模式一样。
  2. 注意,这个模式定义的构造函数没有使用函数申明,使用的是函数表达式。函数申明会创建内部函数,在这里并不是必须的。基于同样的原因(但操作相反),这里申明MyObject并没有使用任何关键字。因为不使用关键字申明的变量会创建在全局作用域中,所以MyObject变成了全局变量,可以在这个私有作用域外部被访问。在严格模式下给未申明的变量赋值会导致错误。
(function(){
	let name ="";
	Person = function(value){
		name = value;
	};

	Person.prototype.getName = function(){
		return name;
	};

	Person.prototype.setName = function(value){
		name = value;
	}
})();

let person1 = new Person('Nicholas');
console.log(person1.getName());//Nicholas
person1.setName("Matt");
console.log(person1.getName());//Matt

let person2 = new Person('Michael');
console.log(person1.geName());//Michael
console.log(person2.getName());//Michael
  1. 这里的Person构造函数可以访问私有变量name,跟getName()和setName()方法一样。使用这种模式,name变成了静态变量,可供所有实例使用。这意味着在任何实例上调用setName()修改这个变量都会影响其他实例。调用setName()或创建新的Person实例都要把name变量设置为一个新值。而所有实例都会返回相同的值。
  2. 像这样创建静态私有变量可以利用原型更好地重用代码,只是每个实例没有了自己的私有变量。最终,到底是把私有变量放在实例中,还是作为静态私有变量,都需要根据自己的需求来确定。
  3. 注意:使用闭包和私有变量会导致作用域链变长,作用域链越长,则查找变量所需的时间也越多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子 旭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值