js私有特性,公有特性和特权特性

js中创建对象一般有两种常用方式一,对象字面量。二,构造函数法 。

其中对象字面量方法很简单,在此不必赘述。


对于一个对象来说,有属性(attribution)和方法(method),把对象的属性和方法统称起来不妨称为对象的特性(property)。


对于对象字面量创建的对象,只有公有特性。对象的属性和方法只要通过点操作符就可以随意访问和修改,对象很容易被破坏,对象的封装性很差。

而构造函数法创建的对象就能提供一定的封装性。实现类似于C++java的私有方法,常量,静态类等特性。


下面看一个典型的例子


//Person类

function Person(){


  //私有特性

  var age=‘23‘;


  //特权特性

  this.name=‘Bronvis‘
  
  this.sayAge=function(){

    alert(‘age: ‘+age);

  }

}


//公有特性    

Person.prototype={


  location:‘Hangzhou‘

  sayLocation:function(){

    alert(‘Location: ‘+this.location);

  }

}


//类的公有静态特性

Person.country=‘China‘;


var obj=new Person();


//对象的静态特性

obj.sex=‘male‘;

 

对于这种构造函数方式创建的对象。

可以发现对象的属性和方法有4种方式创建。其中可以分为两大类,一,对象自身特性。二,所有对象共享的原型特性。


一,对象自身特性

 

1,var关键字

  私有特性。通过函数的作用域限定变量的可访问性仅限于函数内部,从而实现这些特性只能在对象内部访问。

 

2,this关键字

  特权特性。通过this关键字实现创建的特性可以被外部任意对象通过点操作符访问,但相较于对象静态添加的特性,又能够访问对象的私有属性。所以,常被称为特权属性。

 

3,对象静态特性

  公有特性。(和特权属性相比,不能访问私有特性)


二,原型特性

 

  公有特性。和对象静态特性创建的属性的区别主要在于内存的占用。原型特性是多个对象共享同一片内存,而对对象静态特性则每个对象都占用内存。


上面的典型例子,只创建了类的静态公有特性,下面的例子将会创建类的私有静态特性


//通过闭包的方式实现类的静态私有属性

var Person=(function(){


  //类的静态私有特性

  var Time;


  //返回一个构造函数

  return function (){


    //私有特性

    var age=‘23‘;


    //特权特性

    this.name=‘Bronvis‘

    this.sayAge=function(){

      alert(‘age: ‘+age);

    }

 }

})();


//类的公有静态特性

Person.country=‘China‘;

 

其中类的静态私有属性常用来实现C++java语言中的常量

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。