10步学会JavaScript面向对象编程
1. 什么是对象
对象是一种数据结构,用于存储属性和方法。在JavaScript中,对象可以通过{}或new Object()创建。对象的属性可以是字符串、整数或函数。
示例:
// 使用字面量创建一个对象
var person = {
name: "张三",
age: 18,
sayHello: function() {
console.log("你好,我叫" + this.name + ",今年" + this.age + "岁。");
}
}
// 使用new关键字创建一个对象
var book = new Object();
book.title = "《JavaScript高级程序设计》";
book.author = "Nicholas C. Zakas";
book.sayHello = function() {
console.log("这本书的名字是:" + this.title + ",作者是:" + this.author);
}
2. 属性和方法
对象的属性和方法可以通过点操作符或方括号来访问。
console.log(person.name); // "张三"
console.log(person["age"]); // 18
person.sayHello(); // "你好,我叫张三,今年18岁。"
3. 构造函数和原型
构造函数用于创建一个对象,并为对象添加属性和方法。
示例:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log("你好,我叫" + this.name + ",今年" + this.age + "岁。");
}
var person = new Person("张三", 18);
person.sayHello();
通过原型,我们可以为构造函数创建的所有对象添加属性和方法。这样,我们可以节省内存,因为所有的对象共享同一个原型。
4. this关键字
在JavaScript中,this关键字表示当前对象。当你在一个对象中使用this关键字时,它将指向该对象。
var person = {
name: "张三",
sayHello: function() {
console.log("你好,我叫" + this.name);
}
}
person.sayHello(); // "你好,我叫张三"
函数中的this关键字将根据调用函数的方式而有所不同。
5. 继承
在JavaScript中,对象是可以继承属性和方法的。
示例:
function Animal(name) {
this.name = name;
}
Animal.prototype.sayHello = function() {
console.log("我是" + this.name);
}
function Dog(name, color) {
Animal.call(this, name);
this.color = color;
}
// 继承Animal的属性和方法
Dog.prototype = new Animal();
var dog = new Dog("小白", "白色");
dog.sayHello(); // "我是小白"
6. 原型链
通过原型,我们可以创建一个原型链,每个对象都继承了它的父对象的属性和方法。
示例:
function Animal(name) {
this.name = name;
}
Animal.prototype.sayHello = function() {
console.log("我是" + this.name);
}
function Dog(name, color) {
Animal.call(this, name);
this.color = color;
}
// 继承Animal的属性和方法
Dog.prototype = new Animal();
function Poodle(name, color, hairLength) {
Dog.call(this, name, color);
this.hairLength = hairLength;
}
//继承Dog的属性和方法
Poodle.prototype = new Dog();
var poodle = new Poodle("小黄", "棕色", "长毛");
poodle.sayHello(); // "我是小黄"
7. 命名空间
在JavaScript中,我们可以使用命名空间来防止名称冲突。我们可以使用对象来表示命名空间。
示例:
var myNamespace = {
name: "My Application",
version: "1.0",
sayHello: function() {
console.log("Hello, " + this.name);
}
}
// 调用命名空间中的函数
myNamespace.sayHello();
8. 模块
在JavaScript中,通过模块化,我们可以将代码划分为多个文件,以便管理和维护。
示例:
// module1.js
var module1 = {
name: "Module1",
sayHello: function() {
console.log("Hello, " + this.name);
}
}
// module2.js
var module2 = {
name: "Module2",
sayHello: function() {
console.log("Hello, " + this.name);
}
}
// app.js
var module1 = require("module1");
var module2 = require("module2");
module1.sayHello();
module2.sayHello();
9. 封装
在面向对象的编程中,封装是隐藏对象的状态和实现细节,只向外部暴露必要的接口。在JavaScript中,我们可以使用闭包来实现封装。
示例:
function Person(name, age) {
var _name = name;
var _age = age;
this.getName = function() {
return _name;
}
this.getAge = function() {
return _age;
}
this.sayHello = function() {
console.log("你好,我叫" + this.getName() + ",今年" + this.getAge() + "岁。");
}
}
var person = new Person("张三", 18);
person.sayHello();
10. ECMAScript 6的类
在ECMAScript 6中,新增了class关键字,用于定义类。
示例:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log("你好,我叫" + this.name + ",今年" + this.age + "岁。");
}
}
var person = new Person("张三", 18);
person.sayHello();
以上是JavaScript面向对象编程的基础知识和技巧,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:面向对象的Javascript之一(初识Javascript) - Python技术站