JavaScript面向对象:封装、继承与多态解析
171 浏览量
更新于2024-08-30
收藏 66KB PDF 举报
JavaScript中的对象三大特性——封装性、继承性和多态性,是构建复杂应用程序的基础。下面将分别详细介绍这三个特性。
一、封装性
封装是面向对象编程的核心原则之一,它旨在保护数据不受外部非法访问,同时提供有限的接口供外部操作。在JavaScript中,封装主要体现在变量的访问控制和函数的使用上。
1. 访问控制:
- 公有(Public):通过`this`关键字定义的属性和方法,可以在任何地方访问。
- 私有(Private):使用闭包或变量提升(Hoisting)来创建的变量,只能在定义它的函数内部访问。例如,在示例中,`var age`和`var salary`是私有变量,外部无法直接访问。
```javascript
function Person(name, age, sal) {
this.name = name;
var age = age;
var salary = sal;
}
```
2. 构造函数与成员方法:
- 构造函数用于创建对象并初始化其属性,如`Person`函数。
- 成员方法是对象可以调用的功能,如`Person`函数内的`abc`方法。
二、继承性
JavaScript的继承机制是通过原型链(Prototype Chain)实现的,允许一个对象继承另一个对象的属性和方法。有以下几种继承方式:
1. 构造函数继承(Constructor Inheritance):
- 通过原型赋值(`__proto__`)或`Object.create()`来实现,子类可以访问父类的公有属性和方法。
2. 原型链继承(Prototype Inheritance):
- 使用`prototype`属性,将父类的方法添加到子类的原型上,使得子类实例能够访问这些方法。
3. 寄生组合式继承(Parasitic Combination Inheritance):
- 结合了构造函数和原型链继承,通常被认为是最优的继承方式,避免了引用类型的副本问题。
三、多态性
多态是指同一个接口,不同的对象可以有不同的实现。在JavaScript中,多态主要体现在函数调用上,由于函数的动态绑定特性,同一个函数在不同的对象上可以有不同的行为。
1. 动态绑定(Dynamic Binding):
- 当调用对象的方法时,实际执行的是该对象实例在原型链上找到的那个方法,而非函数定义时的对象。
2. 方法重写(Method Overriding):
- 子类可以覆盖父类的方法,从而实现不同的功能。
例如:
```javascript
function Animal(name) {
this.name = name;
}
Animal.prototype.sayName = function() {
console.log('I am an animal');
};
function Dog(name) {
Animal.call(this, name);
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.sayName = function() {
console.log('Woof, I am a dog');
};
var myDog = new Dog('Fido');
myDog.sayName(); // 输出 'Woof, I am a dog'
```
在这个例子中,`Dog`类覆盖了`Animal`类的`sayName`方法,展示了多态性。
总结,JavaScript的封装性确保了数据的安全性,继承性提供了代码复用和扩展的能力,而多态性则让程序更具灵活性。理解并熟练运用这三大特性,是编写高效、可维护的JavaScript代码的关键。
2011-08-26 上传
2020-11-20 上传
2021-06-07 上传
2020-10-16 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38557980
- 粉丝: 7
- 资源: 925
最新资源
- 自习室预约小程序分为小程序端和后端管理端。 小程序端使用微信小程序原生开发。 后台管理端是前后端分离的系统,前端使用.zip
- go-factory-cli:基于工厂的urfav CLI
- C++迷宫
- avr_fdvlib:Atmel Atmega16832812802560 的 C++ 库。 支持通用算法、压缩解压算法、日期时间、ADC、中断、时间调度程序、内存处理程序、字符串、向量、循环缓冲区、数组、EEprom 数组、随机数、onewire、FTP 服务器、W5100 控制器、HTTP 服务器、带脚本的 HTTP 服务器, UDP Client, NTP Client, MACARPICMPIPUDP stack, UART, SPI, TwoWire, AXE033, DS1307, DS18B
- oop-java-dynamic-array-regocziTamas:oop-java-dynamic-array-regocziTamas由GitHub Classroom创建
- scaffolder-vue3-vite-capacitor
- 学习MySQL笔记,来源于网络整理.zip
- 最新版linux jdk-11.0.15_linux-x64_bin.tar.gz
- 电信设备-农田水利移动式喷灌装置.zip
- 心脏病发作
- Random-cpp-codes
- Sara-s-
- planck-geography:工作正在进行中
- Public-learning-repository:Public_learning资料库
- 学习mysql的各种案例.zip
- 视差:Um site para amostra deserviçoprestado com o efeito parallax