Js OOP:来自类的私有变量

时间:2016-07-03 00:55:48

标签: javascript oop private

Hello社区这是一个简单的问题。

有人能告诉我为什么这个打印“未定义”?

function Person(first,last,age) {
   this.firstname = first;
   this.lastname = last;
   this.age = age;
   var bankBalance = 7500;
}

// create your Person 
var john = new Person ('John','Doe',33);

// try to print his bankBalance
document.write (john.bankBalance);

在最后一行我想打印john.bankBalance是7500 谢谢!

4 个答案:

答案 0 :(得分:2)

由于this的范围仅在构造函数中,您需要添加bankBalance。你可以这样做:

this.bankBalance = 7500;

或者,您可以为bankBalance设置一个getter / setter,如下所示:

this.getBalance = function() {
    return bankBalance;
}

this.setBalance = function(balance) {
    bankBalance = balance;
}

以下是JSFiddle演示了本地变量bankBalance的getter和setter的函数。

这是另一个带有'public'bankBalance变量的JSFiddle,可以作为实例变量进行访问。

答案 1 :(得分:1)

bankBalance仅在功能范围内可用。如果您想公开访问,则应使用" this"就像你使用firstname和lastname一样。

答案 2 :(得分:0)

你写的

bankBalance它只限于构造函数。如果要将其作为实例变量访问,则需要像this.firstname et那样声明它。人。

答案 3 :(得分:0)

这是因为Javascript的特性称为闭包。它基本上意味着如果对象是嵌套的,那么内部对象只能从它们之外的对象访问变量。通过使用this关键字,您实际上使变量成为该对象的属性。使用var声明的变量将无法访问布局该方法的对象。有趣的阅​​读请查看此链接

http://javascript.crockford.com/private.html

以下是具有私有变量和一些公共方法和属性的对象的示例。这些特性非常有用,因为它们限制了对象的使用。在下面的这个例子中,我们可能不希望开发人员篡改数组,因此我们可能只是给他们一个添加工具,删除工具,他们只能看到偶数索引: -

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]);
        }
    }
}