javascript 特性1

基于对象 与 面向对象:
    基于对象
        具有封装的特性
       
    面向对象
        基于对象  并且可以继承  多态
       
    javascript 是基于对象的,每个对象都可以有它独特的属性。但是它的每一个对象
    不能被继承。

    对象之间存在一种 泛化 的关系,即说明这两个对象是 一类 对象。通过类来声明,这样诞生
    的很多对象都是一个类的对象。而在javascript中,有两种方式是不具有这样的 泛化 关系的。

    var a = new Object();
    a.age = 20;
    a.gengder = 'male';

    var b = {age:20, gender:'male'};

    这样声明的两个对象你能说他们是一类对象吗?

    function Cust(a, g)
    {
        this.age = age;
        this.gender = gender;
    }
    var cust1 = new Cust(20, 'male');
    var cust2 = new Cust(22, 'famale');

 



    这样的呢?

    在 java c++ 等的面向对象的语言中,都是先有类的声明,后才能有类的对象。
    继承 封装 多态 都是在类的声明的基础上进行的改进,所以说面向对象的特性是
    基于对象 且 可以继承 实现多态的。

封装 与 闭包
    所谓封装,就是指一个类的 属性 或 方法 可以被声明为 共有或私有的,只有共有的
    方法和属性才能被外部环境访问。
    javascript 函数的对象特征:对象的属性和方法都是共有的    。
    javascript 的另一个特征 闭包 就完成了属性和方法的私有化,使得javascript
    丝毫不逊色于面向对象的各大语言。

    闭包就是利用变量的作用域来控制对象中属性的访问权限。

    function Student(name, age)
    {
        this.name = name;
        this.age = age;
        var addr = "Address infomation";
    }
   
    var stu = new Student("xiaoming", 20);
    // 对于外部环境来说,addr 变量是不可访问的。
    alert(stu.name + ":" + stu.age); // xiaoming:20
    alert(stu.addr);    // undefined 


    我们通过这样的方式来将不公开的属性做以 "封装",就叫做闭包。
    在包内,我们声明对象的属性,在包外没有 this 指向的属性都不能被访问。

对象的 getter 和 setter 属性
    在java当中,我们通常会给一个私有的属性提供 getter 和 setter 方法来供外部
    访问。在javascript当中也一样具有这样的方法,而且javascript当中的getter
    还有一种表现形式,它可以表现成为对象的一个属性。

    getter 方法模板://先看例子
        注意:
            getter 属性中不能访问 prototype 类型的属性
            getter 方法 可以
        this.property =
        {
            valueOf : function(){return ...},
            toString : function(){return ...}
        }


        例子:

            function Student1(name, age, gender)
            {
                this.name = name;
                this.age = age;
                this.gender = gender;
               
                // getter 方法的形式获得信息
                this.getInfo = function ()
                {
                    return "Hello ! My name is " + name
                           + "\n I am " + age + " years old !"
                           + "\nI'a " + gender;
                }
            }

            function Student2(name, age, gender)
            {
                this.name = name;
                this.age = age;
                this.gender = gender;
               
                //定义成属性  模拟getter方法  来获取信息
                this.info =
                {
                    valueOf:function()
                    {
                        return "Hello ! My name is " + name
                           + "\n I am " + age + " years old !"
                           + "\nI'a " + gender;
                    },
                    toString:function()
                    {   
                        return "Hello ! My name is " + name
                           + "\n I am " + age + " years old !"
                           + "\nI'a " + gender;
                    }
                }
            }

            var stu1 = new Student1("xiaoming", 22, "male");
            var stu2 = new Student2("xiaofang", 21, "famale");

            alert(stu1.getInfo()); // getter 方法
            alert(stu2.info); // 对象的 getter 属性

 

       
    对象的setter属性目前只能由 setXxx 方法来实现,目前的 ECMA Script V3 不支持
    setter 属性。   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值