加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 数据采集、建站、AI开发硬件、专属主机、云硬盘!
当前位置: 首页 > 教程 > 正文

javascript的oop怎么编

发布时间:2023-10-13 10:33:06 所属栏目:教程 来源:未知
导读:   这篇“javascript的oop怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收
  这篇“javascript的oop怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“javascript的oop怎么写”文章吧。
 
  原型(prototype)和构造函数(constructor)
 
  在JavaScript中,一个对象的属性和方法可以通过原型来共享,而构造函数则用于创建一个新对象并初始化其属性。以下是一个使用构造函数和原型的简单例子:
 
  function Person(name, age) {
 
    this.name = name;
 
    this.age = age;
 
  }
 
  Person.prototype.sayHi = function() {
 
    console.log("Hi, my name is " + this.name + " and I'm " + this.age + " years old.");
 
  }
 
  var person1 = new Person("John", 30);
 
  var person2 = new Person("Mary", 25);
 
  person1.sayHi(); // Hi, my name is John and I'm 30 years old.
 
  person2.sayHi(); // Hi, my name is Mary and I'm 25 years old.
 
  在上面的例子中,我们定义了一个Person构造函数,初始化了name和age属性。然后,我们使用Person.prototype给每个Person对象添加了一个sayHi方法,这个方法可以被所有Person对象共享。最后,我们创建了两个Person对象,并调用了它们的sayHi方法。
 
  类(class)
 
  在ES6中,JavaScript引入了类的概念,并使用关键字class来实现。类提供了一种更简洁、更易于理解的语法,用于定义对象。
 
  以下是一个使用类的例子:
 
  class Person {
 
    constructor(name, age) {
 
      this.name = name;
 
      this.age = age;
 
    }
 
    
 
    sayHi() {
 
      console.log("Hi, my name is " + this.name + " and I'm " + this.age + " years old.");
 
    }
 
  }
 
  let person1 = new Person("John", 30);
 
  let person2 = new Person("Mary", 25);
 
  person1.sayHi(); // Hi, my name is John and I'm 30 years old.
 
  person2.sayHi(); // Hi, my name is Mary and I'm 25 years old.
 
  在上面的例子中,我们使用class关键字定义了一个Person类,并在constructor方法中初始化了name和age属性。然后,我们定义了一个sayHi方法,用于输出一个招呼。最后,我们创建了两个Person对象,并调用了它们的sayHi方法。
 
  继承(inheritance)
 
  在OOP中,继承是指从一个已有的对象中派生出一个新的对象,新对象继承了原来的对象的属性和方法。在JavaScript中,继承可以通过使用prototype和class来实现。
 
  以下是使用prototype实现继承的例子:
 
  function Person(name, age) {
 
    this.name = name;
 
    this.age = age;
 
  }
 
  Person.prototype.sayHi = function () {
 
    console.log("Hi, my name is " + this.name + " and I'm " + this.age + " years old.");
 
  }
 
  function Student(name, age, major) {
 
    Person.call(this, name, age);
 
    this.major = major;
 
  }
 
  Student.prototype = Object.create(Person.prototype);
 
  Student.prototype.constructor = Student;
 
  Student.prototype.sayMajor = function() {
 
    console.log("My major is " + this.major + ".");
 
  }
 
  let person1 = new Person("John", 30);
 
  let student1 = new Student("Mary", 25, "Computer Science");
 
  person1.sayHi(); // Hi, my name is John and I'm 30 years old.
 
  student1.sayHi(); // Hi, my name is Mary and I'm 25 years old.
 
  student1.sayMajor(); // My major is Computer Science.
 
  在上面的例子中,我们定义了一个Person构造函数,在原型中添加了sayHi方法。另外,我们定义了一个Student构造函数,通过使用call方法调用了Person构造函数来初始化name和age属性,并添加了一个major属性。然后,我们使用Object.create方法创建了一个Person.prototype的副本,并将其指定给Student.prototype,以便Student对象可以继承Person对象的属性和方法。最后,我们定义了一个sayMajor方法,用于输出学生的专业。最终,我们创建了一个Person对象和一个Student对象,并调用了他们的方法。
 
  以下是使用class实现继承的例子:
 
  class Person {
 
    constructor(name, age) {
 
      this.name = name;
 
      this.age = age;
 
    }
 
    
 
    sayHi() {
 
      console.log("Hi, my name is " + this.name + " and I'm " + this.age + " years old.")
 
    }
 
  }
 
  class Student extends Person {
 
    constructor(name, age, major) {
 
      super(name, age);
 
      this.major = major;
 
    }
 
    
 
    sayMajor() {
 
      console.log("My major is " + this.major + ".");
 
    }
 
  }
 
  let person1 = new Person("John", 30);
 
  let student1 = new Student("Mary", 25, "Computer Science");
 
  person1.sayHi(); // Hi, my name is John and I'm 30 years old.
 
  student1.sayHi(); // Hi, my name is Mary and I'm 25 years old.
 
  student1.sayMajor(); // My major is Computer Science.
 
  在上面的例子中,我们定义了一个Person类,在constructor方法中初始化了name和age属性,并在sayHi方法中输出了一个招呼。然后,我们使用extends关键字创建了一个Student类,并使用super关键字调用了Person类的constructor方法来初始化name和age属性,并添加了一个major属性。最后,我们定义了一个sayMajor方法,用于输出学生的专业。最终,我们创建了一个Person对象和一个Student对象,并调用了他们的方法。
 

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章