JS中创建一个新的对象的方法

来源:互联网 发布:网络词 抓马什么梗 编辑:程序博客网 时间:2024/06/07 23:50

1、工厂模式

弊端:没有解决对象的识别问题,即怎么知道一个对象的类型。 
这里写图片描述

2、构造函数模式

这里写图片描述 
与工厂模式相比: 
1、没有显式的创建对象 
2、直接将属性和方法赋给了this对象 
3、没有return语句 
要创建person的实例,必须使用new操作符,以这种方式调用构造函数实际上会经历4个步骤: 
1、创建一个新对象 
2、将构造函数的作用域赋给新对象 
3、执行构造函数中的代码 
4、返回新对象 
创建自定义的构造函数可以将它的实例标识为一种特定的类型。 
构造函数的缺点: 
每个方法都有在每个实例上重新创建一遍。person1和person2都有一个sayName()的方法,但两个方法不是同一个Function实例。不同实例上的同名函数是不相等的。 
创建两个完成同样任务的Function实例没有必要,而且还有this对象在,不需要在执行代码前就把函数绑定在特定对象上,可以像下面这样。 
这里写图片描述 
把sayName属性设置成全局的sayName函数,这样,由于sayName包含的是一个指向函数的指针,因此person1和person2对象就共享了同一个函数。 
但是,如果对象需要定义很多方法,那么就要定义很多全局函数,自定义的引用类型也没有封装可言了。为了解决上述问题,引入原型模式。

3、原型模式

理解原型对象 
我们创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。prototype是通过调用构造函数而创建的那个对象实例的对象原型,使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法。 
这里写图片描述 
首先,解析器会问实例person1是否有name属性,如果有,就返回。 
如果没有,就继续去person1的原型中搜索name属性,如果有就返回。 
如果没有,再继续向person1的原型的原型中搜索。 

1 0
原创粉丝点击