面向对象&单例模式&工厂模式
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("+"))
}