一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

JavaScript對象-原型含代碼

JavaScript對象-原型

在 JavaScript 中,對象是一種非常重要的數據類型,它是一組包含鍵值對的數據集合。愛掏網 - it200.com對象可以存儲數據,也可以存儲方法,我們可以通過對象的屬性和方法來操作對象。愛掏網 - it200.com

但是,這些屬性和方法來自何處?這就要涉及到 JavaScript 中的原型。愛掏網 - it200.com

對象在 JavaScript 中是通過構造函數創建的,每個構造函數都有一個原型對象,我們可以通過 __proto__ 屬性獲取它的原型對象。愛掏網 - it200.com

例如,我們可以用以下代碼創建一個構造函數:

function Person(name) {
  this.name = name;
}

let person = new Person('小明');
console.log(person.__proto__); // 輸出 Person {}

這里,Person 就是一個構造函數,我們用 new 關鍵字創建了一個 Person 類型的實例 person愛掏網 - it200.com可以看到,person.__proto__ 輸出了一個空的 Person 構造函數的原型對象。愛掏網 - it200.com

原型可以被看作是一個模板,包含了構造函數可以使用的屬性和方法。愛掏網 - it200.com當我們訪問一個對象屬性或方法時,如果它不存在于自身屬性上,那 JavaScript 就會在原型鏈上繼續尋找該屬性或方法。愛掏網 - it200.com

原型鏈

原型對象之間形成一個鏈式結構,也就是原型鏈。愛掏網 - it200.com在原型鏈中,每個對象都有一個指向其原型對象的 __proto__ 屬性。愛掏網 - it200.com

JavaScript 沿著原型鏈向上搜索,直到找到請求的成員或方法。愛掏網 - it200.com如果它找不到指定的成員或方法,則返回 undefined愛掏網 - it200.com

以下是一個簡單的原型鏈示例:

function Person(name) {
  this.name = name;
}

Person.prototype.sayHi = function() {
  console.log(`Hi, my name is {this.name}.`);
};

function Student(name, grade) {
  this.grade = grade;
  Person.call(this, name);
}

Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
Student.prototype.sayGrade = function() {
  console.log(`I'm in grade{this.grade}.`);
};

let student = new Student('小明', 6);
student.sayHi();         // 輸出 "Hi, my name is 小明。愛掏網 - it200.com"
student.sayGrade();      // 輸出 "I'm in grade 6。愛掏網 - it200.com"
console.log(student.__proto__);          // 輸出 Student.prototype
console.log(student.__proto__.__proto__); // 輸出 Person.prototype

在這個例子中,我們定義了一個 Person 構造函數,它有一個 sayHi 方法,在 Student 構造函數中調用 Person 構造函數,然后通過 Object.create() 方法創建了一個 Student 原型對象,并將其指向 Person 的原型對象,最后,我們定義了 Student 自身的方法 sayGrade愛掏網 - it200.com

person 實例中,我們可以看到 __proto__ 屬性指向了 Student.prototype 對象,這是因為 student 的構造函數是 Student愛掏網 - it200.comStudent.prototype__proto__ 屬性又指向了 Person.prototype,因為我們采用了繼承關系。愛掏網 - it200.com

prototype 和 __proto__ 的區別

JavaScript 中的每個對象都有一個原型,它都有一個指向原型的 __proto__ 屬性。愛掏網 - it200.com每個構造函數也都有一個 prototype 屬性,它所有的實例對象的原型引用了它。愛掏網 - it200.com prototype 屬性是每個 JavaScript 函數中特有的屬性。愛掏網 - it200.com

先來看 prototype 對象。愛掏網 - it200.com

  • 函數的 prototype 是一個對象。愛掏網 - it200.com
  • 但是普通對象沒有 prototype 屬性,因為 prototype 只屬于構造函數。愛掏網 - it200.com

在 JavaScript 中,每個構造函數都有一個 prototype 對象。愛掏網 - it200.com這個對象包含添加到該類型所有實例的屬性和方法。愛掏網 - it200.com例如,在以下代碼中:

function Person() {}
Person.prototype.name = '小明';

這個 name 屬性是 Person 構造函數的所有實例共享的。愛掏網 - it200.com

接下來,我們來看 __proto__ 屬性。愛掏網 - it200.com

  • __proto__ 是每個 JavaScript 對象都有的屬性,它指向該對象的原型對象。愛掏網 - it200.com
  • __proto__ 屬性在 JavaScript 中是一個非標準屬性,它被大多數現代瀏覽器支持。愛掏網 - it200.com

在以上提到的例子中,person.__proto__ 返回了一個對象,這個對象是 Person 構造函數的原型對象。愛掏網 - it200.com

使用原型的好處

使用原型有以下幾個好處:

  • 原型可以減少內存消耗。愛掏網 - it200.com當我們創建對象的時候,所有對象都實現了該對象類型的方法和屬性。愛掏網 - it200.com如果使用原型,方法和屬性將統一存儲在原型對象中,而不會分別存儲于每個對象。愛掏網 - it200.com
  • 當我們需要修改對象類型的方法時,只需要在原型對象中修改一次即可,而不用每一個實例對象中都修改一次。愛掏網 - it200.com
  • 代碼的可讀性會更好。愛掏網 - it200.com將所有與類型相關的信息統一存儲在原型對象中,可以使代碼更加直觀。愛掏網 - it200.com

總結

原型和原型鏈是 JavaScript 中非常重要的概念,理解它們對于寫出高效、可維護的代碼來說至關重要。愛掏網 - it200.com在代碼編寫過程中,我們可以使用原型繼承我們所需要的方法和屬性,從而簡化代碼。愛掏網 - it200.com同時,原型也是 JavaScript 最強大的特性之一,它可以提供很多想象力。愛掏網 - it200.com

謹記:對象的屬性和方法可以從原型繼承而來,同時也可以在實際擁有這些屬性和方法的對象上定義。愛掏網 - it200.com如果這個對象上定義了這個屬性或方法,則 JavaScript 不會去遍歷原型鏈。愛掏網 - it200.com

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 综合国产在线 | 国产美女永久免费无遮挡 | 在线观看亚 | 在线免费观看黄色 | 国产精品午夜电影 | 中文字幕在线免费观看 | 在线黄色网 | 91在线一区二区 | 国产在线麻豆精品入口 | 亚洲天堂中文字幕 | 欧美精品一区二区三区在线 | japanhd美女动 | 影音先锋亚洲资源 | 成人精品在线视频 | 国产欧美一区二区在线观看 | 午夜av毛片| 国产精品国产自产拍高清 | 亚洲精品在线免费播放 | 韩国精品在线观看 | 91视在线国内在线播放酒店 | 久久狠狠 | 国产精品a一区二区三区网址 | 欧美一区 | 91精品国产综合久久久密闭 | 在线看av网址 | 日日夜夜视频 | 一区二区三区在线免费 | 99热在线播放 | 黄 色 毛片免费 | 国产传媒毛片精品视频第一次 | 国产精品999 | 一本久久a久久精品亚洲 | 亚洲日韩第一页 | 亚洲在线一区二区三区 | 国产探花在线精品一区二区 | 成人在线视频免费观看 | 蜜桃精品视频在线 | 日韩av网址在线观看 | 北条麻妃99精品青青久久主播 | 国产视频精品在线观看 | 亚洲欧美成人影院 |