面向对象
是一种编写思想;OOP、高内聚、低耦合 封装、继承、多态
- 例子
| 类 | 实例 |
人类 马云
动物类 人类
狮子类 辛巴
JS中的内置类:Array(数组类)//[] String(字符串)//'' Number(数字类)//1 Boolean(布尔类)//true false Object(对象类)//{}
function(函数类)//function
var ary=["1","2"]//字面量的方式创建的数组类的实例
var ary2=new Array("1","2")//构造函数的方式创建的数组类的实例
var ary3=new Array(10)//参数只有一个数字的时候,数字代表的是数组的长度
面向过程
也是一种编程思想
设计模式
JS中的几种常见的设计模式
- 单例模式
单例模式其实就是一个对象,可以避免命名冲突的问题,对象名 我们也称为 **命名空间** (一般可以用来封装一些工具函数 库)
var obj={
name:"小明",
age:12
}
- 高级单例模式
也是一个对象;只是由一个函数返回了一个单例
function fn(){
var name="Zf";
var age=10;
function init(){
log(name,age)
}
return {
init
}
}
- 工厂模式
其实就是一个函数
function factory(name,age,sex){
var obj = {
name,age,sex,
eat(){
},
play(){
}
}
return obj;
}
var per11 = factory('小明',10,1);
- 构造函数模式
function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
this.eat = function(){}
this.play = function(){}
// return []
}
var per22 = new Person('zf',100,0);// pre22 是Person的一个实例
new 执行函数的时候 函数内部的this 都是指向一个堆内存;函数执行完成之后;又把this返回出去了
//若写了返回值 但是返回的是一个值类型那么默认返回仍是this;
//若返回值是个引用数据类型,则返回值就默认是这个引用数据类型了
var ary = new Array();// ary 是 Array的一个实例
// es6 的箭头函数是不能通过new的方式执行
// es6 创造类的方式 是通过 class创造的;
var FN2 = ()=>{
this.name = 111;
}
class FN3{
constructor(name,age){
this.name = name;
this.age = age;
}
}
var f3 = new FN3('小明',100);
console.log(f3);
- 原型模式
再构造函数的基础上加了 一个原型(prototype)的概念
function Person(name='zf',age=10,sex=1){
this.name = name;
this.age = age;
this.sex = sex;
}
console.log(Person.prototype)
Person.prototype.eat = function(){
console.log('吃');
}
Person.prototype.play = function(){
console.log('玩');
}
Person.prototype.qqq = 123;
class Fn{
constructor(name,age){
this.name = name;
this.age = age;
}
eat(){
}
play(){
}
}
// Fn 只能通过 new 的方式执行;
var f = new Fn();
console.log(f);