返回

JavaScript网页编程的对象世界

前端

JavaScript对象:万物皆对象

在现实世界中,万物皆对象。对象是一个具体的事物,可以拥有行为和特征。例如,一个人可以是对象,他的行为包括走路、说话、吃饭等;他的特征包括姓名、年龄、性别等。

在JavaScript中,对象也是一个具体的事物,只不过它是一个虚拟的对象,存在于计算机内存中。JavaScript对象是无序属性的集合,其属性可以包含基本值、对象或函数。

JavaScript对象创建

我们可以使用多种方式来创建JavaScript对象。

  • 使用字面量创建对象
var person = {
  name: "张三",
  age: 20,
  gender: "男"
};
  • 使用构造函数创建对象
function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;
}

var person = new Person("张三", 20, "男");
  • 使用工厂模式创建对象
function createPerson(name, age, gender) {
  return {
    name: name,
    age: age,
    gender: gender
  };
}

var person = createPerson("张三", 20, "男");

JavaScript对象操作

我们可以使用各种方法来操作JavaScript对象。

  • 访问对象属性
var name = person.name;
  • 修改对象属性
person.name = "李四";
  • 添加对象属性
person.hobby = "打篮球";
  • 删除对象属性
delete person.hobby;

JavaScript对象属性

JavaScript对象可以拥有任意数量的属性,每个属性都有一个名称和一个值。

  • 属性名称可以是字符串、数字或符号。
  • 属性值可以是任何类型的数据,包括基本值、对象或函数。
  • 属性可以是可读的、可写的或只读的。

JavaScript对象方法

JavaScript对象也可以拥有方法,方法是对象的行为。

  • 方法可以是函数,也可以是生成器函数。
  • 方法可以接受参数,也可以不接受参数。
  • 方法可以返回一个值,也可以不返回任何值。

JavaScript对象实例

JavaScript对象可以通过实例化构造函数来创建实例。

function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name);
  };
}

var person1 = new Person("张三", 20, "男");
var person2 = new Person("李四", 30, "女");

person1.sayHello(); // Hello, my name is 张三
person2.sayHello(); // Hello, my name is 李四

JavaScript对象继承

JavaScript对象可以通过继承来获取另一个对象的属性和方法。

function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name);
  };
}

function Student(name, age, gender, school) {
  Person.call(this, name, age, gender);

  this.school = school;

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name + " and I am a student at " + this.school);
  };
}

var student1 = new Student("张三", 20, "男", "清华大学");

student1.sayHello(); // Hello, my name is 张三 and I am a student at 清华大学

JavaScript对象原型

JavaScript对象拥有一个原型,原型也是一个对象,它是对象的父对象。对象的原型包含了一些共有的属性和方法,这些属性和方法可以被对象继承。

function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;
}

Person.prototype.sayHello = function() {
  console.log("Hello, my name is " + this.name);
};

var person1 = new Person("张三", 20, "男");

person1.sayHello(); // Hello, my name is 张三

JavaScript对象封装

JavaScript对象可以封装数据和行为,从而实现信息隐藏和数据保护。

function Person(name, age, gender) {
  // 私有变量
  var _name = name;
  var _age = age;
  var _gender = gender;

  // 公共方法
  this.getName = function() {
    return _name;
  };

  this.getAge = function() {
    return _age;
  };

  this.getGender = function() {
    return _gender;
  };

  // 特权方法
  this.setName = function(name) {
    _name = name;
  };

  this.setAge = function(age) {
    _age = age;
  };

  this.setGender = function(gender) {
    _gender = gender;
  };
}

var person1 = new Person("张三", 20, "男");

person1.getName(); // 张三
person1.getAge(); // 20
person1.getGender(); // 男

person1.setName("李四");
person1.setAge(30);
person1.setGender("女");

person1.getName(); // 李四
person1.getAge(); // 30
person1.getGender(); // 女

JavaScript对象多态

JavaScript对象可以实现多态,即同一方法可以根据不同的对象产生不同的行为。

function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name);
  };
}

function Student(name, age, gender, school) {
  Person.call(this, name, age, gender);

  this.school = school;

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name + " and I am a student at " + this.school);
  };
}

function Teacher(name, age, gender, subject) {
  Person.call(this, name, age, gender);

  this.subject = subject;

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name + " and I am a teacher of " + this.subject);
  };
}

var person1 = new Person("张三", 20, "男");
var student1 = new Student("李四", 30, "女", "清华大学");
var teacher1 = new Teacher("王五", 40, "男", "数学");

person1.sayHello(); // Hello, my name is 张三
student1.sayHello(); // Hello, my name is 李四 and I am a student at 清华大学
teacher1.sayHello(); // Hello, my name is 王五 and I am a teacher of 数学

结语

JavaScript对象是JavaScript中非常重要的概念,它可以用来组织和存储数据,并通过方法来操作数据。对象可以继承自其他对象,从而实现代码复用。对象还可以实现多态,即同一方法可以根据不同的对象产生不同的行为。通过熟练掌握JavaScript对象,我们可以编写出更加灵活和可维护的代码。