关键词

JavaScript 高级篇之闭包、模拟类,继承(五)

JavaScript 高级篇之闭包、模拟类、继承是JavaScript语言学习中比较重要的一部分,本文将针对这三个概念进行详细的介绍和举例操作。

闭包

1.什么是闭包

闭包是指在一个函数内部定义的函数,并且这个函数可以访问到它外部函数作用域内的变量。闭包也可以定义在全局作用域内。JavaScript 中的所有函数都可以作为闭包来使用。

2.闭包的用途

  • 实现数据隐藏
  • 实现封装
  • 实现动态生成函数

3.闭包的例子

function outer() {
  var x = 10;
  function inner() {
    console.log(x);
  }
  return inner;
}
var innerFunc = outer();
innerFunc(); // 输出10

该例子中,inner()在函数outer()内部定义,因此可以访问到outer()内部的变量x。当outer()函数被调用时,inner()函数被分配到outer()函数的变量作用域内,在函数调用之后,该变量仍然存在于内存中。在这个例子中,inner()函数可以访问outer()函数中定义的变量,这就是闭包的一个实例。

模拟类

1.什么是模拟类

JavaScript 中没有类的概念,但我们可以通过使用函数和原型来模拟类。JavaScript中的函数可以作为构造函数,而函数的原型可以作为类定义的一个原型。使用这些特性,我们可以模拟出类的继承层次结构。

2.模拟类的例子

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.getName = function() {
  return this.name;
};
Person.prototype.getAge = function () {
  return this.age;
}
function Student(name, age, grade) {
  Person.call(this, name, age);
  this.grade = grade;
}
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
Student.prototype.getGrade = function () {
  return this.grade;
}

var stu = new Student('小明', 18, 6);
console.log(stu.getName()); //输出 小明
console.log(stu.getAge());  //输出 18
console.log(stu.getGrade()); //输出 6

该例子中,通过使用Person函数模拟一个类,Student函数通过调用 Person 函数并设置其原型继承自 Person 来模拟继承。通过访问 Student 的实例 stu 的不同方法,我们也可以看出新Student类的实现和使用效果。

继承

1.什么是继承

继承是一种重要的面向对象编程规则,它允许新创建的类或对象获取一个或多个现有类的属性和方法。JavaScript中,继承是通过原型来实现的。

2.继承的例子

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

Parent.prototype = {
  getName: function () {
    return this.name;
  },
  getGender: function () {
    return this.gender;
  }
}

function Child(name, gender, age) {
  Parent.call(this, name, gender);
  this.age = age;
}

Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;

Child.prototype.getAge = function () {
  return this.age;
}

var child = new Child('小明', 18, '男');
console.log(child.getName()); //输出 小明
console.log(child.getGender()); //输出 男
console.log(child.getAge()); //输出 18

该例子中, Child 函数通过调用 Parent 函数并设置其原型继承自 Parent 来模拟继承,child 实例可以同时获取 Parent 类的属性和方法,以及 Child 类的自有属性和方法。

以上是对 JavaScript 高级篇之闭包、模拟类、继承 这三个重要概念的详细介绍和示例说明。

本文链接:http://task.lmcjl.com/news/11475.html

展开阅读全文