js protobuf,JS面向對象,__proto__和prototype詳解

 2023-10-15 阅读 17 评论 0

摘要:一、類,對象和原型 類是具體事物的抽象,而對象是類的實例。舉個例子,學生類可以有nama屬性,grade屬性,study方法等等,而對于學生類的實例就具體到某一個學生上去了,如name:小紅 grade:高二 等等 理解了類和對象我們再

一、類,對象和原型

類是具體事物的抽象,而對象是類的實例。舉個例子,學生類可以有nama屬性,grade屬性,study方法等等,而對于學生類的實例就具體到某一個學生上去了,如name:小紅 grade:高二 等等
理解了類和對象我們再來說說原型,在JS中不區分類和實例的概念,而是通過原型來實現面向對象編程
比如我們要實現小紅這個對象,我們可以通過下面在這個小明的對象實現

	var xiaoming = {name: '小明',height: '高一',study: function() {console.log(this.name + '正在學習');}};var xiaohong = {name: '小紅'};xiaohong.__proto__ = xiaoming;//讓xiaohong對象的原型指向xiaomingxiaohong.study(); //小紅正在學習

你可以理解對小紅這個對象是以小明為原型創造,或是先將小明這個對象抽象成類,再根據這個類創造小紅這個對象。

proto:隱式原型,JS每個對象中內置的屬性,用于指向對象的原型對象
由此,可以得出一條原型鏈,根據對象的__proto__屬性一直找,就會得到一條原型鏈,如定義一個數組 var arr = [1, 2, 3];就會有原型鏈
arr ----> Array.prototype ----> Object.prototype ----> null
instanceof就是通過__proto__屬性,順著原型鏈一直尋找來判斷的,而xiaohong.proto = xiaoming;就是構建了一條xiaohong->xiaoming的原型鏈。原型鏈左端,繼承原型鏈右端的方法。故可以給原型鏈右端增加公用的方法,使原型鏈左端都擁有此方法而且省內存。

二、prototype與constructor

JS中函數也是一個對象,故JS可以用構造函數的方法來創建對象

function Student(name) {this.name = name;this.hello = function () {alert('Hello, ' + this.name + '!');}
}var xiaoming = new Student('小明');// 使用new 關鍵字調用一個函數返回一個對象
xiaoming.name; // '小明'
xiaoming.hello(); // Hello, 小明!

js protobuf。用new Student()創建的對象還從原型上獲得了一個constructor屬性,它指向函數Student本身
prototype:顯示原型,JS每個函數中內置的屬性,用于指向函數的原型對象

console.log(Student.prototype.constructor===Student)//true

class

ES6引入了class,使得JS可以定義一個類,與Java相似

class Student {constructor(name) {this.name = name;}hello() {alert('Hello, ' + this.name + '!');}
}//支持用extends關鍵詞進行類的繼承class PrimaryStudent extends Student {constructor(name, grade) {super(name); // 記得用super調用父類的構造方法!this.grade = grade;}myGrade() {alert('I am at grade ' + this.grade);}
}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/139863.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息