工厂模式

1
2
3
4
5
6
7
8
9
10
11
12
//    工厂模式
function Tab(){
//添加原料
let obj = {};
//加工原料
obj.tablength = 1;
obj.psFor = function(){
console.log("psFor....");
}
//出厂
return obj;
}
  • 工厂模式解决了代码复用的问题,
  • 1.但是却没有解决对象识别的问题。即创建的所有实例都是Object类型。(不清楚是哪个对象的实例)
  • 2.没有原型,占用内存。

new运算符

  • new的特点:1.new只能函数 2.自动创建空对象; 3.this绑定到空对象;4 隐式返还this;
  • 通过new来改造工厂模式

构造函数

  • 构造函数要通过new来调用 this–>谁调用指向谁
  • 约定俗成构造函数首字母大写
  • 属性放在构造函数;方法放在原型;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function Tab(){
// let obj = {};--->this;
this.name = "张三";
// this.hobby = function(){
// console.log("篮球");
// }
// return obj;
}
Tab.prototype.psFor = function(){
console.log("psFor...");
}
Tab.prototype.hobby = function(){
console.log("hobby...",this.name);
}
// Tab();
// let tab1 = new Tab();
// console.log(tab1.constructor===Tab);
1
2
3
4
5
6
7
8
9
10
11
//仿写new 运算符;
function myNew(constructor,...arg){
let obj = {};
constructor.call(obj,...arg);
obj.__proto__ = constructor.prototype;
return obj;
}

let tab1 = myNew(Tab);
// console.log(tab1.name)
tab1.psFor();

构造函数性能对比工厂函数 –> 公共空间存放公共方法

prototype原型

  • 通过new实例化出来的对象其属性和行为来自两个部分,一部分来自构造函数,另一部分来自原型。
  • 当声明一个函数的时候,同时也声明了一个原型 。
  • 原型本身是一个对象。
  • 对象属性方法查找规则;

对象属性方法查找规则

面向对象编程

  • 一、面相过程:注重解决问题的步骤,分析问题需要的每一步,实现函数依次调用;

  • 二、面相对象:面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式;

  • 三、面相对象特性: 抽象、 继承、封装、多态

对象和类

  • 一、对象:具体的某个事物;(如:小明、叮当猫)

  • 二、类:一类事物的抽象;(如:人类、猫类)

构造函数改造多个选项卡实例