JS ????? ? ????? ??? ??? ????. 1. ?????, ?? ???? ????? "prototype"? ?? ?? ? ?? ???? ??? ???, ?? ?????? ?? ??? ?????. 2. ????? ??: ??? ???? ???? ???? ? ??? ?? ???? ?? ????. ?, ?????, ? ?? ??? "?????"?? ????. ????? ?? ? ?? ?? ???? ?? ??? ???? ????? ?? ??????? ?? ????? ????? ?? ??? ?????.
? ????? ?? ??: windows10 ???, JavaScript ECMAScript 2021 ??, DELL G3 ???.
1. ?????
?????: ?? ???? ????? ?????? ?? ??? ???? "prototype"? ?? ????? ??? ? ?? ??? ????. ??(??? ???)? ??? ????? ??? ???????? ?? __proto__ ??? ?????. ? __proto__ ??? ??? ???????? ?? ? ?? ???? ?????? ?????. ?? ??? ?????? ??? "??"???.
?? ??? ?? Student ???? ??? ???? ???? ?? ??? ????.
class Student{ constructor(name, score) { this.name = name; this.score = score; } introduce() { console.log(`我是${this.name},考了${this.score}分。`) } } const student = new Student('張三', 99) console.log('student', student); // student Student { name: '張三', score: 99} student.introduce(); // 我是張三,考了99分。
??? ??? ???? ???? ? ????.
??? ??? ?? ??? ??? ?? ??? ?? ??? ?? ?? ??? ?? ? ?? ??? ?? [[Prototype]] ??? ?? ?? ? ? ????.
[[?????]]? ???? ?? ??? [[?????]]? ??? ? ? ????.
[[Prototype]] ??? ?? ??? ??? ???????? ???. ??? ???? ???? ?? ?? ? ?? ???? ?? ? ??? ?? ??? ??? ????? [[Prototype]] ???? ???? ????.
?????? .__proto__ ??? ?? ???? ? ????. __proto__ ??? ??? ? ? ????.
Student() ????? ????? ??? ????. Student() ???? ????? ??? ??? ?? ??? __proto__ ??? ?????.
??? ???? ?? ?????.
??? ???? ????? ??? ???? ??? __proto__ ??? ?????. ???? ????? ??? ??? ???????? ???. ???? ??? ????? ?? __proto__ ??? ??? ???????? ???.
2. ????? ??
????? ??: ??? ???? ???? ???? ? ?? ??? ?? ? ??? ??????? ????. ?, __proto__???. ??????? ?? ? ?? ??, ? ???? ???? __proto__? ?? ??? ??? ???? ???? ?? ?????. ??????? ?? ?? ?? ??? ?????. ?? ????? ????? ?? ????? ??? ?? ??? ?????.
Person ???? ??? ??, Person ????? ???? Teacher ???? ????, Teacher ???? ??? ?????.
class Person { constructor(name) { this.name = name; } drink(){ console.log('喝水'); } } class Teacher extends Person { constructor(name, subject) { super(name); this.subject = subject; } teach() { console.log(`我是${this.name}, 教${this.subject}。`) } } const teacher = new Teacher('哈默', '前端開發(fā)') console.log('teacher', teacher); teacher.teach(); teacher.drink();
?? ??? ??? ????. ) ? drink() ???.
Teacher ??? ???? ? ? ???? ?? ? ??? ???? ??? ?????? __proto__ ??? ??, Teaching() ???? ?? ?? __proto__ ??? ?? ???? ?????. , drink( ) ???? ????.
??? ???? ?? ?????.
可以看到,teacher實例對象本身是沒有teach()方法的,這時就會去teacher對象的__proto__隱式原型指向的Teacher.prototype顯式原型上去找,此時找到了teach()方法并執(zhí)行;同時,Teacher.prototype上仍然沒有找到drink()方法,而Teacher.prototype也是一個對象,有自己的__proto__隱式原型,那么就去Teacher.prototype.__proto__上去找,Teacher.prototype.__proto__會指向Person()構(gòu)造函數(shù)的顯式原型Person.prototype,此時找到了drink()方法并執(zhí)行,這就是原型鏈。
注:
(1)通過__proto__形成原型鏈而非protrotype。
(2)__proto__屬性是對象所獨有的。
(3)prototype屬性是函數(shù)所獨有的。但是由于JS中函數(shù)也是一種對象,所以函數(shù)也擁有__proto__屬性。
三、判斷對象自身是否有某屬性或方法
hasOwnProperty()方法會返回一個布爾值,用于判斷對象自身是否有某屬性或方法。返回true,代表是該對象自身的屬性或方法;返回false,代表是該對象原型上的屬性或方法。
由于Person類繼承自O(shè)bject類,那么執(zhí)行teacher.hasOwnProperty()方法時,實際會找到Object.prototype中的hasOwnProperty()方法并執(zhí)行。
因此,所有繼承了Object的對象都會繼承到hasOwnProperty方法。
同時可以看到,Object.prototype.__proto__ 的值為 null ,即 Object.prototype 沒有原型,所以可以想象在原型鏈中,當找到頂層原型還沒有屬性時,那就是沒有這個屬性,返回返回undefined。
instanceof 運算符:用于檢測構(gòu)造函數(shù)的 prototype 屬性是否出現(xiàn)在某個實例對象的原型鏈上。
看一個例子,使用typeof判斷array的數(shù)據(jù)類型時,返回的是object,因此無法使用typeof判斷array的類型。
const object = {}; const array = []; // 使用typeof判斷數(shù)據(jù)類型,array返回的是object console.log(typeof object); // object console.log(typeof array); // object
下面使用instanceof運算符判斷array的數(shù)據(jù)類型:
// 使用instanceof判斷數(shù)據(jù)類型 const flagObject = object instanceof Array; const flagArray = array instanceof Array; console.log(flagObject); // false console.log(flagArray); // true
object instanceof Array返回false,表示Array.prototype不在object的原型鏈上;array instanceof Array返回true,表示Array.prototype在array的原型鏈上,由此可以區(qū)分object和array的數(shù)據(jù)類型。
也可通過控制臺查看object和array的原型。
注:[] instanceof Object 為 true
? ??? js ?????? ????? ???? ??????? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Stock Market GPT
? ??? ??? ?? AI ?? ?? ??

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

WebSocket? JavaScript: ??? ???? ??? ??? ?? ?? ?? ??: ??? ??? ??? ??? ?? ??? ???? ???? ??? ???? ?? ???? ??. ??? ????? ???? ?? ?? ? ??? WebSocket? JavaScript? ?????. ? ????? ??? ???? ????? WebSocket ? JavaScript? ??? ???? ?? ??? ???? ?? ??? ??? ?????. 1. ??? ??

WebSocket ? JavaScript? ???? ??? ?? ?? ???? ???? ?? ??: ???? ?? ??? ?? ?? ??? ?? ?? ??? ??? ??? ?????. WebSocket? JavaScript? ???? ? ??? ?? ?? ???? ?? ?? ??, ???, ??? ?????? ??? ?? ??? ?? ???? ???? ?????. ? ????? WebSocket? JavaScript? ???? ??? ?? ?? ???? ???? ??? ?????.

JavaScript ? WebSocket: ???? ??? ?? ?? ??? ?? ??: ??? ?? ??? ???? ?? ??? ?? ??? ?? ?????. ??? ???? ?? ??? ?? ???? ????? ?????? ?? ???? ??? ? ?? ????? ??? ? ????. ? ????? JavaScript ? WebSocket ??? ???? ???? ??? ?? ?? ???? ???? ??? ?????. ? ????? ?? ?? ??? ?? ?? ????? ?????. ??

JavaScript ????: HTTP ?? ??? ?? ??, ?? ?? ??? ?????. ??: ? ????? ???? ??? ?? ??? ?? ?????. ??? ??? ? ??? HTTP ?? ??? ???? ??? ?? ??? ???? ??? ?? ??? ?? ?? ??? ???? ?? ??? ????. ? ????? JavaScript? ???? HTTP ?? ??? ?? ??? ? ?? ???? ?? ??? ?????. XMLHttpRequest ??

JavaScript?? HTTP ?? ??? ?? ?? ??: ??? ?? ???? ??? ?? ??? ??????? ?? ??? ???? ?? HTTP ?? ??? ?? ??? ?????. HTTP ?? ??? ???? ?? ?? ??????? ??? ???? ? ? ???? ? ??? ???. ? ????? JavaScript? ???? HTTP ?? ??? ?? ??? ???? ???? ?? ??? ?????. 1. HTTP ?? ??? ?????? HTTP ?? ??? ????? ??? ??? ??? ? ????

JavaScript ? WebSocket: ??? ??? ??? ??? ??? ???? ??? ??? ?? ??? ??? ???? ?? ???? ?? ? ????? ????. ?? ??, ?? ? ??, ?? ???? ? ?? ??? ???? ??? ???? ???? ???? ? ? ???? ???? ? ?? ??? ???? ??? ??? ? ??? ? ? ????. ? ????? JavaScript? WebSocket ??? ???? ??? ??? ??? ???? ?????. ?

JavaScript ? WebSocket: ???? ??? ?? ?? ?? ??: ???? ???? ?? ???? ??? ?? ??? ?? ?? ??? ?? ? ???? ????. ?? ?? ???? ??? ? ???? ?? ??? ???? ??? ?? ? ????. ? ??? ??? ?? ??? ?? ???? ??? ??? ? ????. ??? JavaScript? WebSocket ??? ???? ??? ?? ??? ???? ?? ??? ?????. ? ????? JavaScript? ???? ??? ?????.

WebSocket ? JavaScript? ???? ??? ?? ?? ???? ???? ?? ??: ??? ??? ??? ?? ?? ??? ??? ???? ?? ?? ??? ???? ? ?? ?????. WebSocket? ??? ?? ?????? ??? ??? ??? ??? ??? ??? ? ??? JavaScript? ???? ??? ?? ?? ???? ??? ? ????. ? ????? WebSocket? JavaScript? ???? ??? ??? ??? ???? ??? ?????.