//工厂模式
/**
-
1.使用工厂模式创建对象的原理是用函数封装创建对象,从而同个调用函数而达到复
-
2.由于工厂模式内部都是同个实例化一个Object对象,创建对象的,因此工厂模式创建的对象类型无法真正的区分开来
*/
function createObj1(name, age) {
var obj = new Object();
obj.name = name;
obj.age = age;
return obj
}
function createObj2(type, price) {
var obj = new Object();
obj.type = type;
obj.price = price;
return obj
}
var obj1 = createObj1(‘huangzhizhen’, 21)
var obj2 = createObj2(‘student’, ‘33’)
console.log(‘obj1.name----’, obj1.name)
console.log(‘obj2.type----’, obj2.type)
console.log(‘obj1----’, Object.prototype.toString(obj1))
console.log(‘obj2----’, Object.prototype.toString(obj2))
缺点:
-
使用工厂方法创建的对象,使用的构造函数都是Object(var obj=new Object() )
-
所以创建的对象的类型都是Object类型
-
导致我们无法区分出多种不同类型的对象(如Person、Dog)
1.创建一个构造函数,专门用来创建不同类型的对象(如Person、Gog)
-
构造函数也是一个普通函数,创建方式和普通函数一样
-
不同:
构造函数首字母大写
构造函数的调用方式不同
function Person(){ }
如:
1)普通函数:
var per=Person()
2)构造函数(需要使用关键字来调用)
2.构造函数的执行流程
-
1)立刻创建对象------ 一旦调用构造函数,立刻创建对象(因为使用new关键字,就如我们前面学习的,使用new会立刻在堆内存中开辟新的空间创建对象
-
2)将新建的对象设置为函数中的this(因此在构造函数中,可以使用this来引用新建的对象)
最终
-
3)逐行执行函数的代码
-
4)将这个新建的对象作为返回值返回
总结:
-
使用同一个构造函数创建的对象属于同一个类
-
每个对象称为该类的实例
-
使用(对象 instanceof 狗仔函数)可以检查obj是否为Person类的实例
如: per instanceof Person --true表示是,反之
使用new Object()方式区别不出来
但是!!!!
per instanceof Object----返回结果是true
Object相当于祖宗,因为所有对象都是它的后代
使用构造函数的存在的缺陷:
对于同功能的方法,完全可以使所有对象共享同一个方法(不用每次创建对象时都创建)
解决方法:
将这个函数提出到全局作用域中
同时,所有又同个构造方法创建的对象的方法都是指向了同一个全局的fun方法
好处:大大节省了空间与提高了性能
但是又引发了新的问题,即尽量不要在全局作用域中添加变量
-
(因为将函数定义在全局作用域中,污染了全局作用域的命名空间)
-
而且定义在全局作用域中不安全(因为开发往往不是一个人开发)
因此,引入新的解决方案
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!