溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

javascript的oop怎么寫

發(fā)布時(shí)間:2023-05-16 16:38:23 來(lái)源:億速云 閱讀:112 作者:iii 欄目:web開發(fā)

這篇“javascript的oop怎么寫”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“javascript的oop怎么寫”文章吧。

  1. 原型(prototype)和構(gòu)造函數(shù)(constructor)

在JavaScript中,一個(gè)對(duì)象的屬性和方法可以通過原型來(lái)共享,而構(gòu)造函數(shù)則用于創(chuàng)建一個(gè)新對(duì)象并初始化其屬性。以下是一個(gè)使用構(gòu)造函數(shù)和原型的簡(jiǎn)單例子:

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.

在上面的例子中,我們定義了一個(gè)Person構(gòu)造函數(shù),初始化了nameage屬性。然后,我們使用Person.prototype給每個(gè)Person對(duì)象添加了一個(gè)sayHi方法,這個(gè)方法可以被所有Person對(duì)象共享。最后,我們創(chuàng)建了兩個(gè)Person對(duì)象,并調(diào)用了它們的sayHi方法。

  1. 類(class)

在ES6中,JavaScript引入了類的概念,并使用關(guān)鍵字class來(lái)實(shí)現(xiàn)。類提供了一種更簡(jiǎn)潔、更易于理解的語(yǔ)法,用于定義對(duì)象。

以下是一個(gè)使用類的例子:

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關(guān)鍵字定義了一個(gè)Person類,并在constructor方法中初始化了nameage屬性。然后,我們定義了一個(gè)sayHi方法,用于輸出一個(gè)招呼。最后,我們創(chuàng)建了兩個(gè)Person對(duì)象,并調(diào)用了它們的sayHi方法。

  1. 繼承(inheritance)

在OOP中,繼承是指從一個(gè)已有的對(duì)象中派生出一個(gè)新的對(duì)象,新對(duì)象繼承了原來(lái)的對(duì)象的屬性和方法。在JavaScript中,繼承可以通過使用prototypeclass來(lái)實(shí)現(xiàn)。

以下是使用prototype實(shí)現(xiàn)繼承的例子:

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.

在上面的例子中,我們定義了一個(gè)Person構(gòu)造函數(shù),在原型中添加了sayHi方法。另外,我們定義了一個(gè)Student構(gòu)造函數(shù),通過使用call方法調(diào)用了Person構(gòu)造函數(shù)來(lái)初始化nameage屬性,并添加了一個(gè)major屬性。然后,我們使用Object.create方法創(chuàng)建了一個(gè)Person.prototype的副本,并將其指定給Student.prototype,以便Student對(duì)象可以繼承Person對(duì)象的屬性和方法。最后,我們定義了一個(gè)sayMajor方法,用于輸出學(xué)生的專業(yè)。最終,我們創(chuàng)建了一個(gè)Person對(duì)象和一個(gè)Student對(duì)象,并調(diào)用了他們的方法。

以下是使用class實(shí)現(xiàn)繼承的例子:

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.

在上面的例子中,我們定義了一個(gè)Person類,在constructor方法中初始化了nameage屬性,并在sayHi方法中輸出了一個(gè)招呼。然后,我們使用extends關(guān)鍵字創(chuàng)建了一個(gè)Student類,并使用super關(guān)鍵字調(diào)用了Person類的constructor方法來(lái)初始化nameage屬性,并添加了一個(gè)major屬性。最后,我們定義了一個(gè)sayMajor方法,用于輸出學(xué)生的專業(yè)。最終,我們創(chuàng)建了一個(gè)Person對(duì)象和一個(gè)Student對(duì)象,并調(diào)用了他們的方法。

以上就是關(guān)于“javascript的oop怎么寫”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI