Bootstrap

JavaScript实现类的private、public

定义Js中的类,实际上用的是function,这个语法其实是用来定义函数的。不同于定义函数的是,我们可以在function中通过this.xxx的方式来定义属性和方法。

this.xxx只能定义公有属性和方法,那私有属性和方法怎么办呢?这个可以用到js闭包的知识来解决

对象可以由初始化对象的方法 -- 构造函数产生。构造函数提供在其他编程语言中类提供的特性,包括静态变量和方法。


Public
对象的成员都是public成员。任何对象都可以访问,修改,删除这些成员或添加新成员。主要有两种方式来在一个新对象里放置成员:
在构造函数里
这种技术通常用来初始化public实例变量。构造函数的“this”变量用来给对象添加成员。

functin Container(param) {   
    this.member = param;   
}  
这样,如果我们构造一个新对象var myContainer = new Container('abc'),则myContainer.member为'abc'。

在prototype里
这种技术通常用来添加public方法。当寻找一个成员并且它不在对象本身里时,则从对象的构造函数的prototype成员里找。
prototype机制用来做继承。为了添加一个方法到构造函数创建的所有对象里,只需添加到构造函数的prototype:

Container.prototype.stamp = function (string) {   
    return this.member + string;   
}  
这样,我们可以调用该方法myContainer.stamp('def'),结果为'abcdef'。


Private
private成员由构造函数产生。普通的var变量和构造函数的参数都称为private成员。

function Container(param) {   
    this.member = param;   
    var secret = 3;   
    var that = this;   
}  

该构造函数创建了3个private实例变量: param,secret和that。它们被添加到对象中,但是不能被外部访问,也不能被该对象自己的 public方法访问。它们只能由private方法访问。private方法是构造函数的内部方法。

function People () {
    this.name = "Yorhom";

    var age = 16;

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

    this.getAge = function () {
        return age;
    };
}

var yorhom = new People();
// undefined
alert(yorhom.age);
// 16
alert(yorhom.getAge())


例:编写js的类,使其拥有public和private类型的属性和方法

function Person(_name,_age,_sex,_salary){  
    //public  
    this.name = _name;  
    this.age = _age;  
  
    //privare  
    var sex = _sex;  
    var salary = _salary;  
  
    //public method  
    this.getName = function(){  
        return this.name;  
    }  
  
    this.getAge = function(){  
        return this.age;  
    }  
  
    //private methd  
    function getSex(){  
        return sex;  
    }  
  
    function getSalary(){  
        return salary;  
    }  
  
    this.display = function(){  
        document.write(this.getName() + "---" + this.getAge() + "---" + getSex() + "----" + getSalary());  
    }  
  
}  
  
var smirk = new Person("zy","21","f","5000");  
smirk.display();  


;