JavaScript的封装: 包含工厂模式封装、构造函数模式封装、原型模式封装。(含代码实现)

封装:

  • 此节专门讲函数的工厂模式、构造函数模式和原型模式的封装
  • Author:大冰

工厂模式

》工厂模式需要创建一个对象,最后return这个对象。

function createPerson(name, age, job) {
    const o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function() {
        console.log(this.name);
    };
    return o;
}

const person1 = createPerson("dabing", 18, "Web前端工程师");
const person2 = createPerson("jack", 20, "Nodejs");
person1.sayName(); //dabing
console.log(person1.sayName == person2.sayName); //false
// console.log(Object.getOwnPropertyDescriptors(person1));

构造函数模式

》构造函数的名称的首字母都是要大写的,非构造函数则以小写字母开头

function CreateFun(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function() {
        console.log('CreateFun name : ',this.name);
    };
}

const fun =  new CreateFun("jobing", 21, "全栈工程师");
fun.sayName(); //CreateFun name :  jobing
// console.log(Object.getOwnPropertyDescriptors(fun));

const fun2 = new CreateFun();
fun2.sayName(); //CreateFun name :  undefined

构造函数模式和工厂模式的区别

(1)构造函数没有显式地创建对象
(2)属性和方法直接赋值给了this
(3)没有return

如何解决构造函数模式内部创建的方法在实例时,实例化后,两个实例的方法是不相等的呢?他们为什么不相等?

  • 1.糟糕的方法:就是在全局定义一个方法,让构造函数内部方法指向外部全局定义的方法。但这样子会影响到全局作用域。
  • 2.较好的方法:就是利用原型模式,把方法定义在对象/构造函数的原型上。
  • 3.不相等:因为他们在实例化的时候,是重新创建了方法,重新new Function()。该方法的作用域不同,因此不同实例上的函数虽然同名却不相等。

利用原型模式的解决构造函数模式的方法不同实例的问题

function CreateFPrototype(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    CreateFPrototype.prototype.sayName = function() {
        console.log(this.name);
    };
}

const fp1 = new CreateFPrototype("dahuang", 18, "教育家");
const fp2 = new CreateFPrototype("dabing", 18, "科学家");
fp1.sayName(); //dahuang
fp2.sayName(); //dabing
console.log(fp1.sayName === fp2.sayName); //true
// console.log(Object.getOwnPropertyDescriptors(fp1));//不存在sayName方法,因为他在原型中
// console.log(Object.getOwnPropertyDescriptors(CreateFPrototype));//返回构造函数里面的原型和其他参数
// console.log(Object.getPrototypeOf(fp1)); //原型中存在sayName方法,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
介绍: 1、App封装 实现App封装,混合开发App,100多JS接口功能交互。 2、制作小程序 通过接口网站封装成小程序。 安装环境变色龙app封装系统源码 环境:PHP 5.6 MySQL 存储:七牛存储 源码介绍: 这款变色龙app封装系统源码更适合小企业主和个人用户,打包过程简单方便快捷。附件为变色龙app封装系统源码官方正版下载,无毒无后门,原汁原味。 源码功能介绍: 1、App封装 实现App封装,混合开发App,100多JS接口功能交互。 2、制作小程序 通过接口网站封装成小程序。 安装环境变色龙app封装系统源码 环境:PHP 5.6 MySQL 存储:七牛存储 环境要求: CPU:1核,内存:2G,硬盘:10G,1M带宽 不能用空间,有要修改php环境的要求。 版本区别: 1、免费版本 封装App 微信小程序 2、授权版本 封装App 微信小程序 分发App 在线签名 超级签名 企业签名 苹果免签App 详细安装配置教程: 1、导入sql里数据表 ,文件 /sql/install.sql 2、修改:public/cmpl_config.php 内网址更换 ’master_site’=>’www.zywxfx.com’,//官网地址 ’source_site’=>’www.bslyun.com’,//存放用户配置资源的地址 ’db_site’=>’www.bslyun.com’,//数据库变动专用地址 ’https_site’=>’www.zywxfx.com’,//https官网地址 更换为自已的网址 db_config.php 修改数据库联接地址 3、网站启动https。 4、必须同步商品 后台商品内点同步。 5、如服务器是nginx的,配置nginx伪静态文件.txt IIS导入.htaccess配置文件。 6、php环境要求 system、popen、exec 函数开放 7、七牛的配置 对象存储->您的存储空间->图片样式->新建图片样式 选择手动编辑 编辑处理接口请填写:$0.apk 图片处理样式名称:atail 保存样 8、安装php的扩展imagick 9、增加php上传字节限制 max_input_vars = 2000 如果是windows服务器,请配置以下操作。不是windows服务器对以下操作忽略。 1、iis7以上,下载页404问题 https://www.cnblogs.com/imust2008/p/6829927.html 2、ipa包无法下载 打开Internet 服务管理器Internet 服务管理器–>网站属性–>HTTP头(MIME映射)–>新建 添加下列内容类型(MIME) 关联扩展名 plist application/xml 顺便加一个 ipa application/vnd.iphone 3、无法更新商品 文件在/system/common.php 注:解压密码打开压缩文件可以看到
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值