您的位置:首页 > Web前端 > JavaScript

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

2014-08-09 16:18 861 查看
首先声明的是: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变量就等于0
Activity.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变量就等于0
activity.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(原型)中而不写在构造函数中?

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

同时要注意的是构造函数中的属性和方法的优先级要高于原型中的,即如果构造函数和原型中的属性或方法使用了相同的名称,原型会被覆盖哟!尽量避免这种情况啦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐