Javascript Js OOP:类中的私有变量
有人能告诉我为什么这个打印“未定义”?Javascript Js OOP:类中的私有变量,javascript,oop,private,Javascript,Oop,Private,有人能告诉我为什么这个打印“未定义”? 职能人员(第一、最后、年龄){ this.firstname=first; this.lastname=last; 这个。年龄=年龄; var银行余额=7500; } //创造你的人 var john=新人('john','Doe',33); //试着打印他的银行存款余额 书面文件(约翰银行余额)您所写的银行余额仅限于构造函数。如果您想将其作为实例变量访问,则需要使用this.firstname等人声明它。bankBalance仅在函数范围内可用。如果您想
职能人员(第一、最后、年龄){
this.firstname=first;
this.lastname=last;
这个。年龄=年龄;
var银行余额=7500;
}
//创造你的人
var john=新人('john','Doe',33);
//试着打印他的银行存款余额
书面文件(约翰银行余额)代码>您所写的银行余额仅限于构造函数。如果您想将其作为实例变量访问,则需要使用this.firstname
等人声明它。bankBalance仅在函数范围内可用。如果您想公开访问,您应该像使用firstname和lastname一样使用“this”进行定义 您需要添加此
,因为银行余额的范围仅在构造函数中。您可以这样做:
this.bankBalance = 7500;
或者,您可以为银行余额设置getter/setter,如下所示:
this.getBalance = function() {
return bankBalance;
}
this.setBalance = function(balance) {
bankBalance = balance;
}
下面是一个示例,演示了局部变量bankBalance
的getter和setter函数
下面是另一个带有“public”bankBalance
变量的实例变量。这是因为Javascript的一个称为闭包的特性。这基本上意味着,如果对象是嵌套的,那么内部对象只能从外部对象访问变量。通过使用this关键字,基本上可以使变量成为该对象的属性。使用var声明的变量将不可供布局该方法的对象访问。要阅读有趣的文章,请查看此链接
下面是一个带有私有变量、一些公共方法和属性的对象示例。这些特征非常有用,因为它们限制了对象的使用。在下面的示例中,我们可能不希望开发人员篡改阵列,因此我们可能只给他们一个可添加、可删除的工具,他们只能看到偶数索引:-
function SpecialArray() {
var _array = [];
this.length = _array.length;
this.add = function(stuff) {
// add some stuff to it
}
this.remove = function(stuff) {
// take some stuff out of it
}
this.displayEvenNumbers = function(){
for (var i=0; i< _array.length ; i+=2){
console.log(_array[i]);
}
}
}
函数SpecialArray(){
var_数组=[];
this.length=_array.length;
this.add=函数(stuff){
//给它加些东西
}
this.remove=函数(stuff){
//拿点东西出来
}
this.displayEvenNumbers=函数(){
对于(变量i=0;i<_array.length;i+=2){
log(_数组[i]);
}
}
}
因为john
没有银行余额
属性。构造函数Person
中的变量bankBalance
在其外部不可用(因为JavaScript的作用域规则)。此外,JS对私有属性没有语言支持;不过,闭包可以用来模拟它们。初学者需要记住的一点是,JS中没有“类”。相反,JS使用原型。当您执行var bankBalance
时,它不像Java那样声明成员属性,它只定义一个局部变量。要添加属性,您必须实际更改实例的属性(this.bankBalance
),或通过原型(Person.prototype.bankBalance=7500
)进行更改。感谢大家。现在我知道了一点Js的工作原理