首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • ---------------- JS 中实现静态属性------------------- [已结贴,结贴人:kuiyouli]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-15 11:21:43 楼主

    通常情况下 ,大家都用 prototype 为类定义非静态的属性

    那么要为类定义一个静态的属性

    如题,我想在一个自定义类中实现静态
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-15 11:29:401楼 得分:10


    var s = function(){
      this.a = function(){
        alert('aa');
      };
      var b = function(){
      alert('bb');
      };
    };

    var t = new s();
    s.a();
    s.b();

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-15 11:30:232楼 得分:10
    function xxx()
    {}

    xxx.xx="xxx";//定义静态属性
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • muxrwc
    • 等级:
    发表于:2007-10-15 11:30:383楼 得分:10
    <script type="text/javascript">
    var xx = new Function();
    xx.prototype.static = {
    version : "1.1.1"
    };

    var a = new xx;
    var b = new xx;
    a.static.version = "2.2.2";
    alert(b.static.version);
    </script>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-15 11:32:574楼 得分:10


    s.a();
    s.b();

    ---

    sorry
    应该是 t.a();t.b();

    调用一下就知道了,在类里面用this.property ¦ ¦method 可以实现属性和方法私有

    针对你提出的问题:
    可以直接 var d = {
      a:function(){
      //
      };
      b:'bb';
    };

    这样可直接去访问: d.a();d.b();
    不再需要实例化
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-15 11:45:525楼 得分:10
    JScript code
    function Test(){ this.name="test"; } Test.sName = "sName"; var t = new Test(); alert(t.name); alert(t.sName); alert(Test.sName);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • btbtd
    • 等级:
    发表于:2007-10-15 13:22:306楼 得分:10
    到... new 就不是静态了,,,
    你直接用 Object 就行了.............
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • CutBug
    • 等级:
    发表于:2007-10-15 14:20:127楼 得分:10
    这样就可以了
    <script language="javascript">
    function uclass(){
    }
    //静态属性
    uclass.Name="sample";
    //静态方法
    uclass.test=function(){
     alert(1);
    }
    alert(uclass.Name)
    </script>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-15 16:32:178楼 得分:0
    不好意思,没把事情说清楚

    我想要实现的功能是这样的


    假如定义类  ClassA


    function ClassA()
    {
    }

    在给他定义一个属性 P1,可以这样访问

    var a=ClassA.P1

    我想让这个属性只读,或者在修改它的值时执行一个动作


    当给P1赋值时  ClassA.P1="132456",抛出一个异常或者出现一个提示 ,相当于C#里面的如下代码


    public static object P1
    {
      get{return .....}
      set{throw new Exception("属性只读")}
    }

    相当于JS如下函数

    ClassA.SetP1=function()
    {
        alert("属性只读")
        throw "属性只读"
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • btbtd
    • 等级:
    发表于:2007-10-15 16:49:329楼 得分:10
    属性器嘛...啥静态属性...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • muxrwc
    • 等级:
    发表于:2007-10-15 17:41:5410楼 得分:10
    FF里有__defineSetter__
    IE里实现不了,最多只可以用toString模拟__defineGetter__
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • CutBug
    • 等级:
    发表于:2007-10-15 17:44:1111楼 得分:0
    <script language="javascript" >
    //不想被改常量放到类中作为类变量
    function Vars()
    {
    }
    Vars.x = 0;


    function uclass()
    {
    }

    //自定义类,通过ReadOnly()实现类变量不可修改
    uclass.readZone = function()
    {
        function ReadOnly(){};
        ReadOnly.prototype = Vars;
        return new ReadOnly();
    }
    uclass.readZone().x = 100;
    alert(uclass.readZone().x);//uclass.readZone().x是0,而不是100
    </script >
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-16 08:59:5712楼 得分:0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cat_hsfz
    • 等级:
    发表于:2007-10-16 11:56:3313楼 得分:10
    静态属性就是不用prototype直接加到对象上。

    /* 这是一个实例方法 */
    String.prototype.instanceMethod = function() {}

    /* 这是一个静态方法 */
    String.staticMethod = function() {}
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-16 21:19:5314楼 得分:0
    楼上的大哥,你这是静态方法的说

    var a=String.staticMethod();
    var a=String.staticMethod;

    这两个不同的说
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-17 13:38:4115楼 得分:0
    二楼的就是了。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-17 18:10:0616楼 得分:0
    JS不是C#,定义的每个属性/方法都是 public 的,实现不了你想要的好种 get; set;
    其实你只是想在改变值的时候做一个监控,那还不如用一个方法更好:
    Class.name ==> Class.setName() 这样你就可以监控了
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved