天天看点

(十一) js中对象创建的方式

个人想法: 对于面向对象编程的实现方式, 无论是 像java python c++等语言中的<code>类</code>,或者说js中的<code>原型继承</code>, 说到底都只是一种实现方式而已, 就像下雨天可能绝大多数人的习惯是打伞, 但是我穿雨衣也同样可以, 好与不好因人而异, 因需求而异

<code>工厂:</code> 批量生产物品, 不对用户暴露生产细节, 用户只需要会使用就行

同样, <code>工厂模式</code> 也是这样一个原理, 不会对用户暴露创建逻辑, 并且是通过封装特定的接口来创建新的对象

**步骤: **

新建一个对象

定义属性和方法

return出去

在ES6之前, 我们约定俗成的将 首字母大写的函数 定义为构造函数

使用构造函数来模拟类会使得每个方法会在每个实例都创建一次, 也就意味着不同实例的同名方法实际上是不一致的

简单回顾一下原型和原型链:

每个函数都有一个<code>prototype</code>属性, 指向一个原型对象

每个对象都有一个<code>__proto__</code>属性, 指向其构造函数的<code>prototype</code>

因此利用原型和原型链, 我们可以不必在构造函数中定义对象的信息, 而是将这些信息直接添加到原型对象中

是最常见、使用最广泛的方式

顾名思义: 就是将构造函数模式和原型模式结合起来使用, 取其精华, 剔其糟粕

构造函数模式定义实例属性

原型模式定义共有属性和方法

动态原型模式将所有信息都封装在了构造函数中,初始化的时候,通过检测某个应该存在的方法时候有效,来决定是否需要初始化原型

if判断只会在初次调用构造函数时才会执行, 之后再调用不会执行

这种模式的基本思想就是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新建的对象

这种模式与工厂模式没有什么不同, 非得要找出个不一样, 该模式用了<code>new</code>关键字, 并且把封装的函数首字母大写,当构造函数叫

所谓 稳妥 就是指 没有公共属性, 而且方法也不引用this

仅记录自己的学习总结,如有错误,还请评论指正~

继续阅读