JS中的自定义类与对象:从工厂方法到Prototype
需积分: 9 198 浏览量
更新于2024-10-05
收藏 114KB DOC 举报
"JS中自定义类和对象的创建方法"
在JavaScript中,自定义类和对象是构建复杂应用程序的基础。本文将探讨三种常见的方法:工厂方法、构造函数以及使用`prototype`属性。
5.1 工厂方法
工厂方法是一种创建对象的模式,它通过一个函数(在这里是`createFruit`)来返回特定类型的对象。在这个例子中,`createFruit`函数创建了一个新的`Object`实例,并赋予了`name`和`number`属性,还定义了一个`showName`方法用于显示对象的名称。然而,由于每次调用`createFruit`都会创建一个新的方法实例,这可能导致内存开销增加,尤其是在需要大量创建相似对象时。
```javascript
function createFruit() {
var tempFruit = new Object();
tempFruit.name = "apple";
tempFruit.number = 5;
tempFruit.showName = function() {
alert(this.name);
};
return tempFruit;
}
var Fruit1 = createFruit();
var Fruit2 = createFruit();
```
5.2 构造函数
构造函数是一种更面向对象的创建对象的方式,它们通常以首字母大写的函数形式出现。构造函数允许通过`new`关键字创建对象实例,将属性和方法绑定到`this`上下文中。尽管构造函数与工厂方法相似,但同样存在每个实例都有自己方法副本的问题,导致内存效率不高。
```javascript
function Fruit(name, number) {
this.name = name;
this.number = number;
this.showName = function() {
alert(this.name);
};
}
var Fruit1 = new Fruit("apple", 5);
var Fruit2 = new Fruit("pear", 3);
```
5.3 使用`prototype`
为了解决前面提到的问题,JavaScript提供了`prototype`属性。通过将方法添加到构造函数的`prototype`上,所有实例都可以共享这些方法,从而节省内存。首先定义一个空的构造函数,然后将属性和方法添加到`prototype`上:
```javascript
function Fruit() {}
Fruit.prototype.name = "apple";
Fruit.prototype.number = 5;
Fruit.prototype.showName = function() {
alert(this.name);
};
var Fruit1 = new Fruit();
var Fruit2 = new Fruit();
```
通过这种方式,所有`Fruit`的实例都可以访问`showName`方法,而无需为每个实例创建一个新的方法副本。这种方法更加高效,尤其在处理大量实例时。
总结来说,JavaScript提供了多种创建自定义类和对象的方法,包括工厂方法、构造函数以及使用`prototype`。在实际开发中,应根据需求选择最合适的创建方式,以优化性能和内存使用。随着ES6的引入,类(Class)的概念也使得JavaScript的面向对象编程更加直观,但它在底层仍然使用了`prototype`机制。
2011-10-09 上传
2012-12-24 上传
2012-01-29 上传
2011-05-19 上传
2020-12-12 上传
2020-10-29 上传
2020-12-04 上传
2021-07-15 上传
2021-05-29 上传
qinxinrong
- 粉丝: 1
- 资源: 26
最新资源
- Vue_frontend_for_Laravel_rest_api
- react_calculator:react_calculator
- Smartclient-Top-Cases:基于 JavaFX Java Swing 的应用程序显示按类型分组创建的顶级案例
- Data-Mining
- php-cartography.alterway.fr:网站来源-Source website php
- hackrank2nd 1-11-2017,c语言软件代码大全源码,c语言
- C#-Leetcode编程题解之第19题删除链表的倒数第N个结点.zip
- gboard-large-clipboard:MVP重现Gboard中的大型剪贴板崩溃
- code_hub_acc_academy
- generator-jade:玉器项目的约曼发电机
- agv:用于自动导引车的 ROS Groovy 包
- peer-flight-search:对等机器人飞行搜索
- gtwizard-0-ex.zip
- Supermarket_Managment_System
- 23种设计模式图.zip
- 太阳高度角.m,vs2017c语言源码,c语言