一、单例模式
1.对象数据类型作用:
把描述同一个事物(同一个对象)属性和方法放在一个内存空间中,起到分组作用,不同事物之间的属性即使属性名相同,相互也不会发生冲突;
2.单例模式:
我们把这种分组编写代码模式叫做“单例模式”;
作用就是对象数据类型分组;
在单例模式中,我们的变量名叫做命名空间;
命名空间:就是我们对象开辟的一个引用空间地址赋值一个变量,我们只是给我们引用地址起了一个名字;
所谓的单例模式就是把描述事物的属性和方法放在一个命名空间下,避免了全局变量的污染;
单例模式是项目开发中设计模式之一,我们团队协作模块化开发基本上都是基于模块化开发,避免代码冲突;
// 单例模式规范写法:
var nameSpace = (function () {
return {
init: function () {},
sum: function () {}
}
})()
nameSpace.init();
nameSpace.sum();
模块开发:对于相对于比较大的项目,需要多人协作开发,我们一般情况下会根据几个功能模板开发,多人写作开发;
二、工厂模式
提现了函数的封装,把一个功能进行封装,这种批量生产的模式就是工厂模式
三、面向对象思想(oop) object oriented programming
面向对象的3个概念: 对象,类,实例
对象:js中一切都是需要学习和研究的对象;
类:对对象的具体细分,具体的分类;例如自然界植物类,动物类,js中函数类,内置类
实例:每一个类中具体事物;
研究对象中类的实例的过程就是面向对象;
js本身就是基于面向对象的思想构造出来的语言,所以说js中有很多的内置类;
每一个数据类型,都一个自己所属的内置类,数据类型的值,都是所属类的实例;
每一个数据类型使用的方法,都是当前所属类提前设定好的方法,所以我们各自的实例才可以调用这些方法;
new Number :每一个数字都是它类的实例;
new String:每一个字符串都是String类的实例;
Boolean,Regexp,Array,Object,Function,Date等;
比如 Array.prototype,我们在数组原型上查看数组类提供的方法,这些方法都是提供给数组实例提供的方法;
元素或者节点集合类:
HTMLContent.prototype 元素集合类,通过dom获取到的元素集合都是他的实例;
nodeList:节点集合类,通过dom获取的节点集合都是他的实例;childNodes
dom元素标签对象的内置类:每一个元素标签都有一个自己对应的内置类;
四、构造函数模式(自定义类)constructor
基于面向对象编辑思想,创建自定义类,基于自己自定义的类;
实例 instanceof 类 :instanceof 检测当前对象是否属于这个类;
typeof不能细分数组,正则;但是我们可以用instanceof进行细分,检测它是不是这个类的实例; [] instanceof Array 检测[]它是不是数组类型;
hasOwnProperty 检测私有属性
in 检测公有属性和私有属性;
![图片描述][1]
继承1:子b继承a,在b类中for in 遍历循环a的实例
function A() {
this.a="a";
}
function B() {
this.b="b";
A.call(this);
}
var b= new B;
console.log(b);
*/
function A() {
this.a="a";
}
A.prototype.getA=function () {};
function B() {
this.b="b";
var objA=new A;
for(var key in objA){
//this[key]=objA[key]
if(objA.hasOwnProperty(key)){
this[key]=objA[key]
}else {
//this.__proto__[key]=objA[key];
B.prototype[key]=objA[key]
}
}
}
B.prototype.getB=function () {};
var b= new B;
console.log(b);
继承2:
function A () {this.a = 'a'}
A.prototype.geta = function () {console.log(this)}
function B () {this.b = 'b'}
B.prototype.getb = function () {console.log(this)}
B.prototype = Object.assign(B.prototype,A.prototype)
console.log(new B)
// Object.assign(对象B,对象A),将对象A合并到对象B上*/
继承3:
b继承a,b.prototype = a.prototype
打开App,阅读手记