JS中“创建对象”及“通过原型创建对象”浅析
来源:互联网 发布:c语言排队系统 编辑:程序博客网 时间:2024/05/16 08:26
JS中“创建对象”及“通过原型创建对象”浅析
这两天重新看着李炎恢的JavaScript视频学习了一遍,在看到第十五章 面向对象及原型 的时候,感觉必须要把所讲的知识点总结一下,以便今后查看:
(备注:查看该篇博客时,请结合视频及视频课件)
一、创建对象的几种方式
1、各自独立声明模式
此时box2和box1是相互独立的,不会混淆。
但是这样子每声明一个结构相同的对象,都得加一段代码,特别不方便,所以有了下面的工厂模式。
2、工厂模式
但由于new出来的对象都从属于Object,当我要使new出来的对象在本质做一些区分的时候,就不行了,此时就有了更简便的构造函数模式。
3、构造函数模式
注意:
此处box1.run != box2.run, 因为他们判断的是引用地址,由此可知,两个对象的方法分别存储在不同的地方,是两个不同的方法。
但 box1.run() == box2.run(),因为它们返回值一样。
当有了对象以后,自然而然就会涉及到对象属性及方法的共享问题(比如,在java中子类们共享父类的成员变量及方法)。
构造函数模式创建出的对象说白了还是相互独立的(比如上面的box1.run != box2.run),如果我要在两个对象之间共享某些属性的话,就必须要采用原型prototype了。
但 box1.run() == box2.run(),因为它们返回值一样。
当有了对象以后,自然而然就会涉及到对象属性及方法的共享问题(比如,在java中子类们共享父类的成员变量及方法)。
构造函数模式创建出的对象说白了还是相互独立的(比如上面的box1.run != box2.run),如果我要在两个对象之间共享某些属性的话,就必须要采用原型prototype了。
二、通过原型创建对象
1、原型模式
1、所new出来的对象在prototype中的属性是共享的,此时box1.run == box2.run
2、能保证所new的对象实例的属性完全统一(和缺点2相对)
该模式的缺点:
2、能保证所new的对象实例的属性完全统一(和缺点2相对)
该模式的缺点:
1、当含有引用类型的属性时,引用类型所指向的属性是存在prototype中,直接在对象中修改引用属性就把所有对象的引用属性都修改了
2、该种模式省略了初始化传参,使得new出来的所有属性都是一样的
2、该种模式省略了初始化传参,使得new出来的所有属性都是一样的
1.1、原型字面量模式
(原型模式的另外一种模式,大体上区别不大,都属于原型模式)
优点: 更好的体现了封装性
缺点: constructor没有指向自身,必须手动强制指向
2、构造函数+原型模式
缺点: 但是此种办法,原型与构造函数相分离,让人感觉很怪异,体现不了封装。
3、动态原型模式
优点:这个模式继承了上一个模式(构造+原型)的所有优点,同时也完美解决了封装性问题
注意:此种模式书写原型时不可用字面量模式,会切断实例和新原型之间的联系的。???
基本到这里,以上两种模式已经能处理大多数问题,而且是比较好的模式了。
但是,还是有一些比较特定的需求,需要用到以下两种比较另类的模式。
4、寄生构造函数模式(工厂模式+构造函数模式)
5、稳妥构造函数模式
我也不知道为啥会出现这样那么奇葩的需求。不过这么多的创建对象模式,确实比Java眼花缭乱多了。
阅读全文
0 0
- JS中“创建对象”及“通过原型创建对象”浅析
- JS中“创建对象”及“通过原型创建对象”浅析
- JS中“创建对象”及“通过原型创建对象”浅析
- 创建对象及原型模式
- js中通过构造函数创建对象
- JS学习笔记-对象创建模式及原型
- 通过原型继承创建新对象
- 【JS】JavaScript中对象的创建与原型模式
- js中创建对象
- 关于JS原型对象的创建
- JS原型+构造函数创建对象
- js加强:原型,创建对象分析,继承
- js 创建对象与原型链继承
- JS创建对象之动态原型模式
- C++通过new创建对象的浅析
- 对象的创建>原型
- 原型模式(对象创建)
- JS中定义对象方式四: 使用原型(prototype)方式创建对象之一
- 音阶对应频率表
- 关于textField输入光标颜色及cleanButton大小和颜色的设置
- 到底什么是UI设计规范
- ArrayDeque循环队列的部分源码分析
- 7月27日云栖精选夜读:AI时代_运维和测试岗位如何开启"第二春"?
- JS中“创建对象”及“通过原型创建对象”浅析
- 剑指Offer——(43)左旋转字符串
- Regular polygon HDU
- CNN 神经网络介绍
- Lua基础之table详解
- Java Iterator ListIterator 迭代器 以及 并发修改异常 ConcurrentModificationException
- Mac java环境变量配置过程记录
- [并查集+启发式合并]BZOJ 2733——[HNOI2012]永无乡
- Material design的学习笔记