面向对象&单例模式&工厂模式

JS是面向对象开发的
面向对象思想:
在JS中所有的东西都是对象
类:比如说自然界有人类,动物类,植物类,植物类..
在JS是我们大体分为两种是[内置类],[自定义类]

内置类

每一种数据类型都已自己对应的类,Number,String,Boolean,Null,Array,Object,Date,(注意!Math不是一个类,就是一个对象)
元素都有自己的内置类
比如:

console.dir(oDiv)会出现当前元素的所属类--proto-- 不断地往上点击查看可以看到最终都是属于Object类的,所有的类都是函数,在JS中Object是所有类的一个"基类","所以万物皆对象" 

====================================================

单例模式

var obj1={
name:"王东",
age:18,
say:functiion(){
console.log("JS")
}
};

var obj2={
name:"刘亚丽",
age:21,
say:functiion(){
console.log("S")
}
};

在之前obj1 obj2就是一个简单的对象名,在这里我们加一个高大上的名字,叫做命名空间.

function fn(){
console.log("fn")
};
function fn(){
console.log("fffff")
}
如果两个人写的都模块名字一样的话 合在一起时就会冲突
换句话来说单例模式就是一个对象,保障变量名不冲突,调用自己的方法直接使用的方法```
        ------------------练习-----------------
        <ul id="OUl1">
        <li>2</li>
        <li>5</li>
        <li>1</li>
        <li>6</li>
        </ul>
        <button id="btn"></button>
        <ul id="OUl2">
        </ul>
        ---------------------------------------------
        需求1:点击每一个li让里面的数字+1
        ---------------------------------------------
        <script>
        var oUl=document.getElementById("oUl1");
        var oUl2=document.getElementById("oUl2");
        var oLis=oUl.getElementsByTagName("li");
        for (var i=0;i<oLis.length;i++){
        oLis[i].onclick=function(){
        this.innerHTML++;}
        }
        </script>
        ----------------------------------------------
        需求2:点击按钮"btn"让oul1列表中的li复制到oul2列表中
        ----------------------------------------------
        <script>
        var btn=document.getElementById("btn");
        btn.onclick=function(){
        
        }
        </script>

===================================================================

工厂模式

我们把实现相同功能的方法封装成一个函数,以后在想实现这个功能,就不用在写一遍代码了,直接执行函数,通过参数来得到具体的实例.
批量生产:低耦合高内聚,减少代码冗余,提高代码利用率.

var girlFriend0={name:"刘嘉玲",age:46};
    var girlFriend1={name:"刘一飞",age:46};
    var girlFriend2={name:"刘试试",age:46};
    function getObj(name,age){
        var obj={};
        obj.name=name;
        obj.age=age;
        return obj
    }
    getObj("秀秀",20)

如果想实现重载的原理就不要写形参,用arguments处理

function ss(a,b){
return a+b
}
function sss(a,b,c){
retrun a*b*c
}
function ss(){
if(arguments.length===2){
return arguments[0]+arguments[1]
}else if(arguments.length===3){
return arguments[0]*arguments[1]*arguments[2]
}else {alert("参数不合法")"}
}
ss()
function fnn(){
return eval(public.toArray(arguments).join("+"))
}
原文地址:https://www.cnblogs.com/Jiazexin/p/7080354.html