日期:2014-05-16  浏览次数:20369 次

Javascript 面向对象的总结与一个小问题?
1。要分清声明的是类还是对象
2。属性和方法依赖的是类还是对象

使用方式1   类和类的交互
=======================
function   people(n,a)   //这是个类
{
    this.name=n;
    this.age=a;
    this.car=null;   //一个空值,没有指定类型(可以是对象),能由方法初始化(或者用构造函数的参数直接初始)
}
people.prototype.getName=function(){return   this.name;}   //类的方法,加上prototype,这样每个对象都共享该方法
people.prototype.setCar=function(car){this.car=car;}//类的方法,把一个car对象放到一个people对象的里面

假设people类的car属性是个对象,所以可以有个car类
function   car(c,b)
{
    this.color=c;
    this.brand=b;
}
car.prototype.getColor=function(){return   this.color;}//类的方法,加上prototype,这样每个对象都共享该方法
================================================================================
使用方式2     类和对象的交互
============================
function   people(n,a)   //这是个类
{
    this.name=n;
    this.age=a;
    this.car=new   Object();   //一个空值,指定类型是对象,已经初始化
    this.car.color= 'red ';     //这个car一般是用做了people的特定属性了,比如说一个下拉列表的控件可以有个内部的timer对象来专门负责时间延迟方面的工作,只有当这个timer对象强大到组件水平时,在把timer对象抽出来升级为类。就是上边的使用方式,两个类的交互
    this.car.getColor=function(){return   this.car.color;}//这是对象的方法,不是类的,所以不要用prototype
}
people.prototype.getName=function(){return   this.name;}   //类的方法,加上prototype,这样每个对象都共享该方法

使用方式3     类方法的声明
=============================================
function   people(n,a)
{
    this.name=n;
    this.age=a;
}
people.car=new   Object();   //这是一个对象,它挂到了类上,是所有对象共同享有的
people.car.color= 'red ';
people.car.getColor=function(){return   people.car.color;}//不要有prototype,因为这个方法属于对象,而不是类
这个方法声明的对象是用于people的所有对象的,可以当作控制类对象的手段,可以把所有类对象共有的东西放在这里,声明为一个对象统一处理

===============================================================
下面有个问题
function   people(n,a)
{
    var   sex= 'male ';     // <-------这种声明是做什么用的,它对类本身及类的实例对象的影响是什么?如果sex值又是个对象,而不是串 'male ',又会有什么影响,这种声明方式的应用价值在那里?
    this.name=n;
    this.age=a;
}

有没有Js造诣深厚的人来指点下?

------解决方案--------------------
用var声明的对象,只有本函数和在其中定义的函数才能访问,对外面来说是完全不可访问的,属于 "私有 "类型privite.
而用this.sex定义的话,可以在people的每个实例中访问到,
------解决方案--------------------
同意zhaoxiaoyang(梅雪香@深圳)的看法,主要是作用域的不同!
------解决方案--------------------

<script>
function people(n,a)
{
var sex= 'male ';
//sex是个引用(指针),你给它赋什么值都可以
//你可以看作 'male '这个值不属于sex,也不属于任何变量
//它是内存里的一块数据~~sex只是指向了它~~
alert(sex);
sex=123;//123是内存里一快数据,现在sex不指向 'male ',指向123
alert(sex);
sex=new Object();
alert(sex);
this.name=n;
this.age=a;
}
people()
</script>