JavaScript 中 私有/公有属性 私有/公有方法 类/实例方法 的区别

来源:互联网 发布:docker跑windows程序 编辑:程序博客网 时间:2024/04/28 02:26

首先声明的是:JavaScript是基于prototype的,而不是基于类的。它不是一门纯面向对象编程语言,记住,JavaScript中万物皆对象。这里说的类,只是借用了面向对象编程的思想,这样可以减少代码量,提高代码的重用性。


一.类的私有属性和公有属性

function Activity(){  var x=1;// var变量定义的是私有属性      //类似与private  this.y=2;//this关键字定义的是公有属性   //类似与public}
私有属性不能直接访问,而公有属性可以

  Activity.x  //会报错  Activity.y  //结果为2;

二.类的私有方法和公有方法

function  Activity(){var draw1=function()   {alert('加油');};   //私有方法this.draw2=function()   {alert('加油');};   //公有方法}
与私有变量和公有变量的定义方法一样,用var变量定义的是私有方法,而this定义的是公有方法,可以直接调用

 Activity.draw2();

三.JavaScript中所谓的静态

      静态,我的理解就是属于类的,而不是属于实例对象的,那么可以直接使用类名来直接调用它。比如:

function  Activity(){.......};//定义一个活动类Activity.count=0;Activity.ale=function(){ alert('这是一个静态方法');};
那么我在其他地方想要使用这些静态方法或者属性,直接使用    类名.属性名        类名.方法名()

var count=Activity.count;    //count变量就等于0Activity.ale();                       //显示‘这是一个静态方法’

注:静态方法或属性都是公有的。



四.JavaScript所谓的动态

    动态,我的理解就算属于实例对象的,而不是属于类的,必须通过new关键字,new出一个实例对象后,利用实例对象才能调用动态属性和方法

它的定义都会使用到关键字prototype。(JavaScript中规定,每一个构造函数中都有且只有一个prototype属性,指向一个对象,这个对象的所有属性和方法会被构造函数的实例继承)。为什么要使用prototype呢?在下面将会讲到,这里就说说怎么调用动态方法(实例方法)。

function  Activity(){.......};//定义一个活动类Activity.prototype.count=0;Activity.prototype.ale=function(){ alert('这是一个实例方法');};
那么我在其他地方想要使用这些方法或者属性,需要new出一个实例对象
var  activity=new Activity()<pre name="code" class="plain">var count= activity.count;     //count变量就等于0activity.ale();                //显示‘这是一个实例方法’

注:静态方法或属性都是公有的。



五.JavaScript中的类方法和实例方法(其实就是静态方法和动态方法)

类方法(静态方法):不需要声明类的实例就可以调用的方法

实例方法(动态方法):需要通过new关键字,new出一个实例对象后,通过实例对象才能调用的方法

function   Activity() { }; //声明一个类。代码编程规范是类名通常大写
(1)创建方法(类方法和实例方法都是在类的外部)
Activity.staticMethod = function() { alert("static method") }; //创建一个类方法Activity.prototype.instanceMethod = function() { "instance method" }; //创建一个实例方法
(2)方法的调用

对于静态方法可以直接调用   Activity.staticMethod但是动态方法不能直接调用   Activity.instanceMethod(); //语句错误, 无法运行。需要首先实例化后才能调用   var instance = new Activity(); //首先实例化instance.instanceMethod(); //在实例上可以调用实例方法



六.为什么把方法写在prototype(原型)中而不写在构造函数中?

         把方法写在原型中比写在构造函数中消耗的内存更小,因为在内存中一个类的原型 只有一个,写在原型中的行为可以被所有实例共享,实例化的时候并不会在实例的内存中再复制一份 ;而写在类中的方法,实例化的时候会在每个实例中再复制一份,所以消耗的内存更高 。所以没有特殊原因,们一般把属性写到类中,而行为写到原型中。

      同时要注意的是构造函数中的属性和方法的优先级要高于原型中的,即如果构造函数和原型中的属性或方法使用了相同的名称,原型会被覆盖哟!尽量避免这种情况啦




0 0