美文网首页
JavaScript类的定义以及单例实现

JavaScript类的定义以及单例实现

作者: im宇 | 来源:发表于2016-10-06 14:09 被阅读51次

写在前面:
这是一篇菜鸟的学习笔记,记录效果实现过程,而没有考虑安全、兼容、性等问题。供新手参考,也希望前辈们指点。

我遇到的JavaScript问题

  • 全局变量的滥用,命名出现了冲突(比如flag就经常用作全局变量)
  • 只会使用面向过程的写法而没有使用过JavaScript面向对象的机制
  • 遇到了一些需要使用单例模式的场景,而js对单例的实现不会写

首先,先记录JavaScript中的类的定义

这是自己通过网络资料写的一段类定义代码,不知道规范定义是否也如此。那就暂且先记录下来吧,以后遇到更好的在来更新。_
需要注意的是“公布方法”引用类成员需要在前面加"this.",而“私有方法”则需在定义时引入添加参数"_this",然后在方法里面使用该参数进行访问类成员

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>JSClassDemo</title>
    
    <script type="text/javascript">
        //一个js类
        function Person(){
            this.name = "zji";
            this.sex;
            this.setName = function(name){
                this.name = name;
            }
            this.getName = function(){
                return this.name;
            }
            this.setSex = function(sex){
                this.sex = sex;
            }
            //公布方法,可以随便访问类成员
            this.outdoorCall = function(){
                alert(this.name);
                indoorCall(this);//可以调用私有方法
                alert(this.getName());//可以调用公布方法
            }
            //私有方法,需要传递this才能访问类成员
            var indoorCall = function(_this){
                alert(_this.sex);           
            }
        }
        //使用该类实例
        function mmdShowToast(name,sex){
            var p = new Person();
            p.setName(name);
            p.setSex(sex);
            p.outdoorCall();
            //p.indoorCall();无法访问
        }
        
    </script>
</head>
<body>
    <button id="send" onclick="mmdShowToast('im宇','男')">显示Toast</button>
</body>
</html>

接着,来看看单例模式的实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8"/>
    <title>JSClassDemo</title>
    <script type="text/javascript">
        //一个js类
        function Person(){
            if(Person.instance !== undefined){
                return Person.instance;
            }
            Person.instance = this;
            this.name = "zji";
            this.setName = function(name){
                this.name = name;
            }
            this.getName = function(){
                return this.name;
            }
        }
        //使用该类实例
        function mmdShowToast(name,sex){
            var p = new Person();
            var q = new Person();
            p.setName(name);
            q.setName("q引用把名字改为imyu");
            alert("p的name="+p.getName()+"\nq的name="+q.getName());
        }
        
    </script>
</head>
<body>
    <button id="send" onclick="mmdShowToast('im宇','男')">显示Toast</button>
</body>
</html>

实际上加入单例的代码只是下面的四行:

if(Person.instance !== undefined){
    return Person.instance;
}
Person.instance = this;

相关文章

  • JavaScript类的定义以及单例实现

    写在前面:这是一篇菜鸟的学习笔记,记录效果实现过程,而没有考虑安全、兼容、性等问题。供新手参考,也希望前辈们指点。...

  • JavaScript设计模式二(单例模式)

    JavaScript设计模式二(单例模式) 这边文章主要是JavaScript中的单例模式定义: 保证一个类仅有一...

  • 实现单例模式的方式2

    方式一: 能保证线程安全 定义类的时候实现单例模式 方式二: 能保证线程安全 对已定义好的类实现单例模式

  • iOS 单例

    单例模式实现不能使用继承 定义单例实现 简写 定义单例实现宏

  • 单例模式

    一、实现单例模式 或者 二、透明的单例模式 三、用代理实现单例模式 四、JavaScript中的单例模式 在Jav...

  • 设计模式——单例模式

    单例模式的定义 单例模式保证一个类在全局中只有一个实例对象。 单例模式的几种实现方式 饿汉模式 在类加载的时候就已...

  • C++ 单例模式

    本文介绍C++单例模式的集中实现方式,以及利弊 局部静态变量方式 上述代码通过局部静态成员single实现单例类,...

  • 设计模式:单例

    单例模式的基本介绍单例模式的实现源码中的单例模式记录 单例模式的基本介绍 定义:确保一个类只有一个实例,自行实例化...

  • 单例模式

    什么是单例模式? 一个类只允许创建一个实例,那个类就是单例类。这个模式就是单例模式。单例模式实现方式:饿汉式:实现...

  • OC - 单例模式

    导读: 一、什么是单例模式 二、单例的作用 三、常见的单例类 四、自定义单例类的方法 一、什么是单例模式 单例模式...

网友评论

      本文标题:JavaScript类的定义以及单例实现

      本文链接:https://www.haomeiwen.com/subject/cipeyttx.html