### JS:prototype用法详解
#### 一、概念解析与基本使用
`prototype`是JavaScript中一个非常重要的概念,尤其自IE4及其后续版本引入以来,成为开发人员扩展内置对象功能的强大工具。`prototype`主要服务于面向对象编程,用于向构造函数创建的所有实例添加共享属性或方法。
**基础概念理解**:
1. **类与对象**:JavaScript虽然本质上是一种基于原型的语言,但在ECMAScript 6中引入了类语法,使面向对象编程更为直观。在本语境中,“类”更多指的是构造函数定义的对象类型,如`Array`、`Boolean`、`Date`等。
2. **`prototype`属性**:每个函数都有一个`prototype`属性,该属性是一个对象,包含了由构造函数创建的所有实例共享的属性和方法。
**基本使用示例**:
- **数字相加**:可以通过`Number.prototype.add`为所有数字实例添加一个相加方法。
```javascript
Number.prototype.add = function(num) {
return this + num;
};
alert((3).add(15)); // 显示18
```
- **布尔值取反**:为布尔值实例添加一个取反方法。
```javascript
Boolean.prototype.rev = function() {
return !this;
};
alert((true).rev()); // 显示false
```
#### 二、已有方法的实现与增强
在实际编程中,`prototype`不仅限于添加全新功能,还常用于增强现有方法的能力,使其更加灵活和强大。
**数组`push`方法增强**:原生的`Array.push`只能添加单个元素,通过`prototype`可以修改为其能够一次性添加多个元素。
```javascript
Array.prototype.pushPro = function() {
var currentLength = this.length;
for (var i = 0; i < arguments.length; i++) {
this[currentLength + i] = arguments[i];
}
return this.length;
};
```
**字符串长度计算改进**:JavaScript默认将全角和半角字符都视为单个字符,但实际中可能需要区分。通过`prototype`可以自定义`String.cnLength`方法来更准确地计算包含全角字符的字符串长度。
```javascript
String.prototype.cnLength = function() {
var arr = this.match(/[^\x00-\xff]/ig);
return this.length + (arr == null ? 0 : arr.length);
};
```
#### 三、新功能实现与高级应用
`prototype`不仅仅用于修补或增强现有功能,更是实现新功能的利器,尤其是在处理复杂需求时。
**字符串左截取功能**:类似VB中的`left`函数,但更智能地处理全角和半角字符,以满足精确长度控制的需求。
```javascript
String.prototype.left = function(num, mode) {
if (!/\d+/.test(num)) return this;
var str = this.substr(0, num);
if (!mode) return str;
var n = str.Tlength() - str.length;
num = num - parseInt(n / 2);
return this.substr(0, num);
};
```
以上示例展示了`prototype`的多样性和实用性,无论是基本功能的添加,已有方法的增强,还是新功能的创造,`prototype`都是JavaScript开发中不可或缺的工具。然而,使用`prototype`也需谨慎,过度使用可能导致代码难以维护,因此建议仅在必要时使用,以保持代码的清晰和效率。