原型深入

今天面试被问到了面向对象编程的设计模式

我在此就总结一下基于面向对象的设计模式的几个常用:

一、单例子模式

单例模式是开发中常用的模式,项目中可以用单例模式来进行模块划分,但是并不能批量的去‘生产’,属于一种手工作业的模式

e.g.:var k={a:1,b:func}

二、工厂模式是指实现同一件的的代码放入一个函数中,以后如果想去实现功能,就没有必要去重写代码(其实简单的来说就是函数的封装,jquery就是用这种方式来封装的)

他的优点,“低耦合高内聚”:何为‘低耦合高内聚’?说白了就是减少代码的冗余,提高代码的可利用率

三、构造函数模式,为了创建一个自定义类和这个类的实例

其实它和工厂模式很像,他们的区别在于执行时;

e.g.、var f=new FN().  f就是整个函数的返回值,所有的类都是函数数据类型,new-类它本身就是一个普通的函数,所有的实例(f)都是数据类型

它和工厂模式也有共同点:他们都形成了私有的作用域,然后形参赋值-预解释-代码由上到下执行

不同点:在代码执行前不用手动去创建对象,constrctor:f。。。。。。浏览器会默认创建一个对象数据类型的值(这个对象就是当前的实例f)然后代码由上至下执行,以当前实例为执行的主体。最后默认返回实例。


检测实例  我们用的是intanceof。。。。为什么不用typeof呢? 因为typeof具有局限性,不能区分object下的对象,数组以及正则。私有属性检测hasownproperty

四、原型链模式:这是一种基于构造函数模式、原型链方法解决了,方法或属性公有的问题、将实例化中的相同属性和方法提取出来,成为公有属性和方法(这里存在兼容性问题不能使用—proto—)

1)每一个函数数据类型,都具备一个天生自带的属性(prototype)并且这个属性是一个对象数据类型的值

2)在prototype上浏览器天生添加了一个属性constructor(构造函数)属性值是当前函数本身

3)每个对象数据类型都自带一个__proto__(ie犯贱不支持这个属性,但是原理是这样的)属性值是当前所属类的原型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值