JavaScript面向对象编程:类与实例详解

0 下载量 164 浏览量 更新于2024-08-30 收藏 108KB PDF 举报
"本文深入讲解了JavaScript中的面向对象程序设计,包括类的创建、实例对象、构造函数以及原型等核心概念。通过实例演示了如何使用工厂模式和构造函数式来创建对象,并介绍了对象的一些基本属性和方法,如Constructor、hasOwnProperty、isPrototypeOf以及propertyIsEnumerable等。" JavaScript是一种支持面向对象编程的动态类型语言,它提供了多种实现面向对象的方式。在JavaScript中,面向对象主要基于以下三种模式:函数、原型和类(ES6引入)。 1. **工厂模式创建对象**: 工厂模式是创建对象的一种方式,如示例中的`CreatePerson`函数。这个函数通过创建一个新的`Object`,然后给它添加属性和方法,最后返回这个对象。这样可以创建具有相同结构的不同对象,例如`p1`。 ```javascript function CreatePerson(name, sex, age) { var obj = new Object(); obj.name = name; obj.sex = sex; obj.age = age; obj.sayName = function() { console.log(this.name); } return obj; } var p1 = CreatePerson('zf', '女', 22); p1.sayName(); // 输出 "zf" ``` 2. **构造函数式创建对象**: 构造函数是一种特殊类型的函数,通常用于初始化新创建的对象。当使用`new`关键字调用构造函数时,会创建一个新的对象,并将其`this`上下文指向这个新对象。在示例中,`Person`就是构造函数,它定义了`name`、`age`和`sex`属性以及`sayName`方法。 ```javascript function Person(name, age, sex) { this.name = name; this.age = age; this.sex = sex; this.sayName = function() { alert(this.name); } } var p1 = new Person('zf', 20, '女'); p1.sayName(); // 弹出对话框显示 "zf" ``` 3. **实例对象与构造函数**: 使用`new`关键字调用构造函数创建的是实例对象,如`p1`。构造函数内部的`this`关键字引用的是新创建的对象。实例对象可以通过`constructor`属性访问其构造函数。 4. **原型**: JavaScript中的对象都有一个内部属性`[[Prototype]]`,通常通过`__proto__`或`Object.getPrototypeOf()`访问。对象可以通过原型链共享属性和方法。当试图访问实例对象的某个属性时,如果该对象本身没有该属性,JavaScript会查找其原型,如果原型也没有,会继续查找原型的原型,直到找到该属性或者查找到原型链的末端。 5. **实例方法与原型方法**: 在构造函数中定义的方法(如`sayName`)是实例方法,每个实例对象都拥有自己的副本。而如果希望所有实例共享同一个方法,可以将方法定义在构造函数的`prototype`上,这样所有实例都可以访问。 ```javascript Person.prototype.sayHello = function() { alert('Hello, ' + this.name); } p1.sayHello(); // 弹出对话框显示 "Hello, zf" ``` 6. **对象的内置方法**: - `hasOwnProperty(propertyName)`:判断对象自身属性是否存在,不检查原型链。 - `isPrototypeOf(object)`:判断传入的对象是否是当前对象的原型。 - `propertyIsEnumerable(propertyName)`:检查指定的属性是否可枚举,即是否可以通过`for...in`循环遍历。 这些是JavaScript面向对象编程的基础,理解它们对于编写复杂的JavaScript代码至关重要。通过灵活运用这些概念,可以创建出高效、可维护的代码结构。