js里能否像c#或者java里的类一样,把很多方法封装在这个类里面,然后调用这个方法的时候可以用class.Fun();这样的形式来调用。
求一个最简单的完整的例子(麻雀虽小五脏俱全)。
万分感谢!
时刻关注!

解决方案 »

  1.   

    function Person() {
       this.name = "jee";
       this.age = 25;
       this.getName = function() {
          return this.name;
       }
    }var person = new Person();
    alert(person.age);
    alert(person.getName());
      

  2.   


    function Person() {
       this.name = "jee";
       this.age = 25;
       this.getName = function() {
          return this.name;
       }
    }var person = new Person();
    alert(person.age);
    alert(person.getName());
    1楼的兄弟的例子不错 我想就他的例子稍微深入的讲下 改正一些小的缺陷
    首先  
    构造函数中这段代码
    this.name = "jee";
    this.age = 25;
    这样的话 稍显死板 因为每一个对象new出来 name 和 age 都是 “jee”  25
    那么改进后代码
    function Person(name,age) {
       this.name = name;
       this.age = age;
       this.getName = function() {
          return this.name;
       }
    }var p1 = new Person("xiaoqiang",1);
    alert(p1.age); //1
    alert(p1.name);//xiaoqiang
    alert(p1.getName());//xiaoqiangvar p2 = new Person("zhangsan",2);
    alert(p2.age);//2
    alert(p2.name);//zhangsan
    alert(p2.getName());//zhangsan
    那么 接下来 再看 这个方法
    this.getName = function() {
          return this.name;
       }
    这样写是没问题的 但是 有一点缺陷 就是 每个对象都维护相同的方法实例 而其实它们可以共享此方法 而不必每个对象都生成此示例 在java语言中 面向对象的思想中 有一条 “继承” 既然此方法对于每个对象来说是公用的 那么可以在它的父类中实现 在javascript中继承 是基于原型对象的继承 在原型对象中实现此方法,那么每个对象调用此方法时 首先查看自己是否有此方法 如果有 调用自己的方法 如果没有 去原型对象中查询 调用原型对象的方法 是不是和java中的继承差不多呢?呵呵 看下 改造后的代码
    function Person(name,age) {
       this.name = name;
       this.age = age;
    }
    Person.prototype.getName = function(){
       return this.name;
    }
    var p1 = new Person("xiaoqiang",1);
    alert(p1.age); //1
    alert(p1.name);//xiaoqiang
    alert(p1.getName());//xiaoqiangvar p2 = new Person("zhangsan",2);
    alert(p2.age);//2
    alert(p2.name);//zhangsan
    alert(p2.getName());//zhangsan另外 还有对象字面量的形式构造对象
    var p1 ={
               name:"zhangsan",
               age:1,
               getName:function(){
                   return this.name;
               }
             };
    alert(p1.name);//zhangsan
    alert(p1.age);//1
    alert(p1.getName());//zhangsan在这里鉴于篇幅 就不多讲了
    如果lz想详细了解面向对象的javascript编程 可以建议你看下这两本书:<<javascript 权威指南>>,<<javascript高级程序设计>>
      

  3.   

    楼上看得和讲得都挺细。TO楼主:JS是很灵活的语言,同时,根据你要处理的具体情况,也有不同的相对更好的解决方法,因此不能希望拿任何一个模式来以不变应万变。关键还是要学通原理。
      

  4.   

    js区的朋友真是别具一格 太太太太太热情了认真的看过了大家的回复,也谢谢wodeguozili推荐的书。
    现在我总结一下,封装可以有两种方法:
    1.以类的形式封装
    2.对象字面量的形式构造对象(wodeguozili在4楼说的,我在百度上没有搜到更多的信息,可能搜索关键字不对)第一种很好理解,但是第二种不太理解,请问这两种有什么区别?
    谢谢!
      

  5.   

    JS没有严格的类定义,从字面上就能看得到的!没有各种类作用域关键字(PUBLIC,PRIVATE,PROTECTED等)!但是却有类似的功能,楼主可以看看类定义的方式,有工厂,动态,原型等!一般都是根据实际需要灵活定制的,并没有规定哪种是正规与不正规!符合需要就好!
      

  6.   

    var p1 ={
               name:"zhangsan",
               age:1,
               getName:function(){
                   return this.name;
               }
             };
    alert(p1.name);//zhangsan
    alert(p1.age);//1
    alert(p1.getName());//zhangsan
    就象这个例子,一看就应该懂吧。
    前者是:
     var name="zhangsan";
     function getName(){
          
      }而这个是:
          name:"zhangsan",
          getName:function(){
            
          }
      

  7.   

    function class(a){
        this.property1 = a;
    };
    class.prototype = {
        method1:function(){
          alert('我是第一个方法')  
        },
        method2:function(a){
          this.property2 = a;
        }
    }
    var newClass = new class("32456456");
    newClass.method1();
      

  8.   

    # theforever
    # (碧海情天-好友满,要加看我资料):你完全没有理解我的意思。第二种方法我会用,我只是不知道专业术语怎么解释。
    我今天悟出了点道理,不知道对不对。请大家指点:这种写法其实是声明了一个数组,但是这个数组的成员是以json格式定义的,并且这个成员既可以是字段、也可以是函数。
      

  9.   

    不是生命了数组,而是就是对象
    格式也不是json。
    你姑且可以理解为字典
      

  10.   

    悟透js中的对象封装,楼主想要深入学习的话可以看看下面的代码,不过要注意灵活运用!//语法甘露:
    var object = //定义小写的object 基本类,用于实现最基础的方法等
    {
    isA: function(aType) //一个判断类与类之间以及对象与类之间关系的基础方法
    {
    var self = this;
    while(self)
    {
    if (self == aType)
    return true;
    self = self.Type;
    };
    return false;
    }
    };
    19
    function Class(aBaseClass, aClassDefine) //创建类的函数,用于声明类及继承关系
    {
    function class_() //创建类的临时函数壳
    {
    this.Type = aBaseClass; //我们给每一个类约定一个Type 属性,引用其继承的类
    for(var member in aClassDefine)
    this[member] = aClassDefine[member]; //复制类的全部定义到当前创建的类
    };
    class_.prototype = aBaseClass;
    return new class_();
    };
    function New(aClass, aParams) //创建对象的函数,用于任意类的对象创建
    {
    function new_() //创建对象的临时函数壳
    {
    this.Type = aClass; //我们也给每一个对象约定一个Type 属性,据此可以访问到对象所属的类
    if (aClass.Create)
    aClass.Create.apply(this, aParams); //我们约定所有类的构造函数都叫Create,这和DELPHI 比较相

    };
    new_.prototype = aClass;
    return new new_();
    };
    //语法甘露的应用效果:
    var Person = Class(object, //派生至object 基本类
    {
    Create: function(name, age)
    {
    this.name = name;
    this.age = age;
    },
    SayHello: function()
    {
    alert("Hello, I'm " + this.name + ", " + this.age + " years old.");
    }
    });
    var Employee = Class(Person, //派生至Person 类,是不是和一般对象语言很相似?
    {
    Create: function(name, age, salary)
    {
    Person.Create.call(this, name, age); //调用基类的构造函数
    this.salary = salary;
    },
    20
    ShowMeTheMoney: function()
    {
    alert(this.name + " $" + this.salary);
    }
    });
    var BillGates = New(Person, ["Bill Gates", 53]);
    var SteveJobs = New(Employee, ["Steve Jobs", 53, 1234]);
    BillGates.SayHello();
    SteveJobs.SayHello();
    SteveJobs.ShowMeTheMoney();
    var LittleBill = New(BillGates.Type, ["Little Bill", 6]); //根据BillGate 的类型创建LittleBill
    LittleBill.SayHello();
    alert(BillGates.isA(Person)); //true
    alert(BillGates.isA(Employee)); //false
    alert(SteveJobs.isA(Person)); //true
    alert(Person.isA(Employee)); //false
    alert(Employee.isA(Person)); //true
      

  11.   

    var obj={
    "yanzhen":function(){
    alert('');
    }
    }
    调用
    obj.yanzhen();
      

  12.   

    我是搞c#的 编程基础还行
    看这份文档毫无难度http://wenku.baidu.com/view/b7c3132ded630b1c59eeb52d.html
    但是这篇文档里没有我上面有疑问的那种方式,我想搜一下资料,根本不知道用什么关键字搜。
      

  13.   

    c#也只是一门语言,虽然里面囊括了几种编程范式,但是我相信做C#的童鞋很多都对此不是很了解。
    看文档也要选择性看啊~对吧如果LZ对此感兴趣,我到建议LZ看点书,比如john resig的书,或者博客也挺好的~~~
      

  14.   

    我不知道你说的编程范式是指什么 我在c#里从来没听到过 可能是指设计模式
    设计模式思想在不同的语言里是互通的的 这方面我很有信心 我不属于你说的那些c#童鞋我最近开始搞js 想设计一个通用类 里面都是一些方法:比如检查字符串是不是邮箱、是不是邮编、是不是手机号等等,因为这些方法是可以通用的,所以把他们封装在一起。
    并且,在调用里面的一个方法时,不必先new一个对象,而是直接用 "class"."function()" 的形式调用。
    刚好我上面的那种方式符合我的预期,所以想把这种方式搞搞清楚。
    再说句题外话
    c#和java是面向对象的top了吧
    js虽说比他们两个要灵活 但是这个“灵活”到底是优势还是劣势呢 听说下一代的js开始考虑class public private这些关键字了 不知道是不是真的
      

  15.   

    javascript是一门语言。如果想写一个库了,还对语言的特性不了解,你觉得靠谱吗
    编程范式和设计模式不是一回事。
    FP/OOP/OP==
    什么叫面向对象中的TOP呢
      

  16.   

    说到面向对象编程语言 大家会说c#和java 不会说c++和js 
    另外,我都说的很清楚了,我不知道这种设计的专业术语是什么,所以让大家给我一个专业术语,我好去百度搜索资料。
      

  17.   

    JS可比C#和JAVA难多了.就是因为它的灵活,换句话说,难捉摸.要说学过的语言种类,26个字母开头的,我学过大半.只有VC和JS,是觉得最难的.VC的难,难在它的组织结构上,是一种令人讨厌的难.而JS的难,是难在它的过于灵活上,如烟雾一样,难有固定形迹,但这是一种令人觉得总是值得玩味的难.所以我说我不敢去总结JS,也信不过任何一个非大师级别的人对JS的总结.要想学透JS,我想最好是有JS解释器的源码,至少能知道JS解释器的行为结果,这样才能从根本上了解JS.
    比如类的构造方式,种类虽多,但最后JS解释器总是会把它们转换为一种内部形式.
    也就是说,知道起点和终点,中间的过程就能想得通了.反过来,知道了终点,那么其它的起点是否可以到达终点,也就容易判断,容易走通了.
      

  18.   

    大哥 你干嘛老揪着“总结”不放 你看看前后语境
    我是总结大家的回复 不是总结自己对js的理解 我要是有总结的水平 我也不来问大家了
    我觉得js的“灵活”是最难的最令人讨厌的 它没有给你固定的定义
    举个例子,如果你要运货,c#java给你货车;你想全家去户外野餐,c#java给你suv。
    而js呢?不管你是什么用途,它都只是给你一辆车,然后你按照自己的需求去改装。更关键的是,从外面开,你分不清楚这辆车到底是干什么的?另外,js虽说灵活 但是这个“灵活”到底是优势还是劣势呢 听说下一代的js开始考虑class public private这些关键字了 不知道是不是真的谢谢
      

  19.   

    我觉得是好事阿,我更喜欢js编程,相对于java来说