在javascript中的公共,私有,静态属性

公共成员

任何函数可以访问,修改,添加或删除这些成员.主要有两种途径:

构造函数

通常是用来初始化对象属性,使用this在构造函数内设置.

因为使用this初始化的对象属性可以使用hasOwnProperty("member")判断该属性是否存在,迭代出属性的所有对象.原型中设置的属性用hasOwnProperty是获取不到的.

function Container(param){

this.member = param

}

原型

通常是用来添加公共方法.

Container.prototype.stamp = function (string) {

    return this.member + string;

}

私有

属性和方法

构造函数里定义的function,即为私有方法;而在构造函数里用var声明的变量,也相当于是私有变量。

var Person = function(name,sex){

    this.name = name;

    this.sex = sex;     

    var _privateVariable = "";//私有变量    

    //构造器中定义的方法,即为私有方法

    function privateMethod(){   

        _privateVariable = "private value";

        alert("私有方法被调用!私有成员值:" + _privateVariable);             

    }

    privateMethod(); //构造器内部可以调用私有方法            

}

 

Person.prototype.sayHello = function(){

    alert("姓名:" + this.name + ",性别:" + this.sex);

}

 

var p = new Person("菩提树下的杨过","男");      

p.sayHello();

 

//p.privateMethod();//这里将报错,私成方法无法被实例调用

alert(p._privateVariable);//显示: undefined

特权

使用一种特权的方法使外部能够访问私有变量和方法.set和get往往用于设置和读取私有变量

var Person = function(){    

    var salary = 0.0;

 

    this.setSalary = function(value){

        salary = value;

    }

 

    this.getSalary = function(){

        return salary;

    }

}

 

var p = new Person();

 

p.setSalary(1000);

alert(p.getSalary());//返回1000

alert(p.salary);//返回undefined

静态

静态类

首先来明确下静态类的定义: 不能被实例化,仅包含静态成员,不包含实例构造函数,无需创建实例,用类名就能直接访问其成员。

StaticClass = {

    a1: 1,

    a2: 2,

    f1 : function(){},

    f2 : function(){}

}

由于StaticClass不包含构造函数,所以不能用new来实例化。 它其实就是一个全局对象。

一般可以使用即时函数创建一个静态类,这样可以保存一些局部变量,和私有函数,并能做一些预处理。

re = function(){

var t1 = 1;

        var t2 = 2;

        function f1(){};

        function f2(){};

        var re = {

   a1: xxx,

           a2: xxx,

           fn1:function(){},

           fn2:function(){}

}

return  re;

}()

静态属性和方法

所谓的静态,不能由实例调用,只能用类名调用

function Person(name) {

    //非静态属性

    this.name = name;

    //非静态方法

    this.show = function() {

        alert(‘My name is ‘ + this.name + ‘.’);

    }

}

//添加静态属性,人都是一张嘴

Person.mouth = 1;

//添加静态方法,哇哇大哭

Person.cry = function() {

    alert(‘Wa wa wa …’);

};

//使用prototype关键字添加非静态属性,每个人的牙可能不一样多

Person.prototype.teeth = 32;

 

//非静态方法必须通过类的实例来访问

var me = new Person(‘Zhangsan’);

//使用非静态方法、属性

me.show();

alert(‘I have ‘ + me.teeth + ‘ teeth.’);

//使用静态方法、属性

Person.cry();

alert(‘I have ‘ + Person.mouth + ‘ mouth.’);

你可能感兴趣的:(JavaScript)