Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Js OOP:类中的私有变量_Javascript_Oop_Private - Fatal编程技术网

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的工作原理