创建对象的方式
来源:互联网 发布:pdf文字编辑器for mac 编辑:程序博客网 时间:2024/05/18 02:08
一. 字面量方式
a) 特点:一次只能创建一个
b) 优点:简单,直观.适用于只需要创建一次的情况(设计模式中的单例模式)
c) 缺点:不能批量创建对象,一次只创建一个对象.如果需要同事创建多个同类型的对象则不能使用字面量的方式
d) 例如: var a={} 直接赋值 var b ={ name:’越’}
二. 工厂模式
a) 特点: 批量生产
b) 优点:快速创建多个对象
c) 缺点:不能很好的标记其类型,也就是__proto__.constructo值全部都是object.形式上与其他创建对象的语法不一致
d) 例如:
function ZGY(name,age){var obj={ }obj.name = name ;obj.age = age;return obj}
工厂模式,批量生产:
var z = ZGY(‘赵广’,’20’);var g = ZGY(‘广越’,’21’);var y = ZGY(‘赵越’,’22’);
但是,我们尽量不要这么干,要尽量使用 var a=new ZGY()
那么在这个new的过程中,发生了什么,
一旦使用new就会产生三步:
1. 创建一个空对象: var obj = {}
2. 调用ZGY.call(obj)调用ZGY函数,同时把里面的this换成对象obj,那么相当于所有this.即加在this上的属性就加在了obj上
3. Obj.__proto__ = ZGY.prototype,让这个对象与ZGY函数建立关系,obj是ZGY创造的
4. Return obj
上面的过程,不需要写代码,是系统自己完成的
,然后对比发现,工厂模式其实就是把new具体写出来了.
但是有一个问题出现了,如果有一个作为构造器的函数,但是他有return这个返回值,那么这个函数还能不能当构造器使用.
答案是,可以,但是当原来的return 1/’abc’ 返回的是这些基本数据类型,那么系统会忽略掉这一句,new 的时候会重新一个return,但是当return返回的本来即丨一个引用数据类型(3引用)的时候,使用new就不会创建心的return了
三. 构造器的方式创建对象
a) 如果我们要把一个函数当作构造器,那么在定于这个函数时,最好首字母大写
b) 优点:创建出来的对象有自己的’标记符’ 也就是__proto__.constructo有值且不完全相对和工厂模式那样全为bject不一样. 优点二,好看…………
c) 所有的对象都有自己独立的方法的拷贝,浪费了空间,也不复合面向对象的特点
怎么解决这个缺点,我们是通过把属性写在构造器内部,而方法写在构造器原型上这种办法来解决的
d)
function ZGY(name,age){ this.name = name; this.age = age; this.say = function(){ return this.name }}var z = new ZGY(‘广越’,’23’)四. 原型方式创建对象
a) 怎么解决构造器的方式创建对象的缺点,我们是通过把属性写在构造器内部,而方法写在构造器原型上,而这种办法就是原型方式创建对象
b)
function ZGY(name,age){this.name = name;this.age = age;}ZGY.prototype.say = function(){ return this.name;}var z = new ZGY(‘广越’,’23’)c) 把自有属性写在构造器上,可以通过形参去赋值,这样每个对象的自有属性都不一样,把属性写在原型上,可以使我们创建的对象都可以访问这些方法是
结论:创建一个对象,用字面量的方法,创建多个对象,用原型方式去创建
- 创建对象的方式
- 创建对象的方式
- 创建com对象的方式
- java对象的创建方式
- Java创建对象的方式
- Java创建对象的方式
- JS创建对象的方式
- javasctipt 创建对象的方式
- js创建对象的方式
- JavaScript 创建对象的方式
- UITableViewCell对象的创建方式
- java创建对象的方式
- java创建对象的方式
- JavaScript对象的创建方式
- JavaScript创建对象的方式
- 对象的多种创建方式
- JavaScript创建对象的方式
- js 创建对象的方式
- nodeJs 安装 npm node_modules
- argparse 与 sys.argv
- 《编程之美》学习笔记
- IntelliJ IDEA(2017.2)安装和破解
- Java的基础知识
- 创建对象的方式
- String、StringBuffer、与StringBuilder的区别
- Dubbo+Zookeeper(rest)
- jsp标签和el表达式
- 安卓学习历程-第四天
- Bitmap和Base64的相互转换
- js实现数据流(日志流,报警信息等)滚动展示,并分页(含实现demo)
- linux(ubuntu)跳板机连接和文件传输
- 使用Wercker进行持续构建与发布