您好,登錄后才能下訂單哦!
這篇“javascript的oop怎么寫”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“javascript的oop怎么寫”文章吧。
原型(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ù),初始化了name
和age
屬性。然后,我們使用Person.prototype
給每個(gè)Person
對(duì)象添加了一個(gè)sayHi
方法,這個(gè)方法可以被所有Person
對(duì)象共享。最后,我們創(chuàng)建了兩個(gè)Person
對(duì)象,并調(diào)用了它們的sayHi
方法。
類(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
方法中初始化了name
和age
屬性。然后,我們定義了一個(gè)sayHi
方法,用于輸出一個(gè)招呼。最后,我們創(chuàng)建了兩個(gè)Person
對(duì)象,并調(diào)用了它們的sayHi
方法。
繼承(inheritance)
在OOP中,繼承是指從一個(gè)已有的對(duì)象中派生出一個(gè)新的對(duì)象,新對(duì)象繼承了原來(lái)的對(duì)象的屬性和方法。在JavaScript中,繼承可以通過使用prototype
和class
來(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)初始化name
和age
屬性,并添加了一個(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
方法中初始化了name
和age
屬性,并在sayHi
方法中輸出了一個(gè)招呼。然后,我們使用extends
關(guān)鍵字創(chuàng)建了一個(gè)Student
類,并使用super
關(guān)鍵字調(diào)用了Person
類的constructor
方法來(lái)初始化name
和age
屬性,并添加了一個(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è)資訊頻道。
免責(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)容。