自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

三張圖搞懂JavaScript的原型對象與原型鏈

開發(fā) 開發(fā)工具
我們知道原型是一個(gè)對象,其他對象可以通過它實(shí)現(xiàn)屬性繼承。但是除了prototype,又有一個(gè)__proto__是用來干嘛的?下面用三張簡單的圖,配合一些示例代碼來理解一下。

對于新人來說,JavaScript的原型是一個(gè)很讓人頭疼的事情,一來prototype容易與__proto__【注意前面是2個(gè)_ 】混淆,二來它們之間的各種指向?qū)嵲谟行?fù)雜,其實(shí)市面上已經(jīng)有非常多的文章在嘗試說清楚,有一張所謂很經(jīng)典的圖,上面畫了各種線條,一會(huì)連接這個(gè)一會(huì)連接那個(gè),說實(shí)話我自己看得就非常頭暈,更談不上完全理解了。所以我自己也想嘗試一下,看看能不能把原型中的重要知識(shí)點(diǎn)拆分出來,用最簡單的圖表形式說清楚。

我們知道原型是一個(gè)對象,其他對象可以通過它實(shí)現(xiàn)屬性繼承。但是除了prototype,又有一個(gè)__proto__是用來干嘛的?長那么像,讓人怎么區(qū)分呢?它們都指向誰,那么混亂怎么記啊?原型鏈又是什么鬼?相信不少初學(xué)者甚至有一定經(jīng)驗(yàn)的老鳥都不一定能完全說清楚,下面用三張簡單的圖,配合一些示例代碼來理解一下。

prototype和__proto__的區(qū)別

  1.  var a = {};  
  2. console.log(a.prototype);  //undefined  
  3. console.log(a.__proto__);  //Object {}  
  4.   
  5. var b = function(){}  
  6. console.log(b.prototype);  //b {}  
  7. console.log(b.__proto__);  //function() {} 

__proto__屬性

  1. /*1、字面量方式*/  
  2. var a = {};  
  3. console.log(a.__proto__);  //Object {}  
  4.   
  5. console.log(a.__proto__ === a.constructor.prototype); //true  
  6.   
  7. /*2、構(gòu)造器方式*/  
  8. var A = function(){};  
  9. var a = new A();  
  10. console.log(a.__proto__); //A {}  
  11.   
  12. console.log(a.__proto__ === a.constructor.prototype); //true  
  13.   
  14. /*3、Object.create()方式*/  
  15. var a1 = {a:1}  
  16. var a2 = Object.create(a1);  
  17. console.log(a2.__proto__); //Object {a: 1}  
  18.   
  19. console.log(a.__proto__ === a.constructor.prototype); //false(此處即為圖1中的例外情況) 

原型鏈

  1. var A = function(){};  
  2. var a = new A();  
  3. console.log(a.__proto__); //A {}(即構(gòu)造器function A 的原型對象)  
  4. console.log(a.__proto__.__proto__); //Object {}(即構(gòu)造器function Object 的原型對象)  
  5. console.log(a.__proto__.__proto__.__proto__); //null 

【本文為51CTO專欄作者“謝軍”的原創(chuàng)稿件,轉(zhuǎn)載可通過作者微信公眾號(hào)(jingfeng18)獲取聯(lián)系】

戳這里,看該作者更多好文

 

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2020-10-20 08:35:34

JS基礎(chǔ)進(jìn)階

2020-02-20 14:00:15

JavaScript原型原型鏈

2022-05-26 09:20:01

JavaScript原型原型鏈

2023-08-28 07:12:54

2017-04-07 11:15:49

原型鏈原型Javascript

2019-02-27 16:00:48

JS原型原型鏈對象

2016-06-07 14:28:39

Javascript原型

2012-01-05 15:07:11

JavaScript

2012-11-08 10:40:47

JavaScript原型鏈

2024-05-15 18:59:01

JavaScript語言原型

2016-05-06 14:02:18

JavaScript原型鏈

2024-08-09 12:44:45

JavaScript原型鏈鏈條

2020-09-10 07:04:30

JSJavaScript 原型鏈

2011-08-31 14:48:33

JavaScript

2010-10-08 09:13:15

oop模式JavaScript

2022-05-26 23:14:26

原型原型鏈JS繼承

2022-03-29 09:15:55

Javascript函數(shù)屬性

2015-11-26 13:11:24

javascript原型鏈作用域

2024-08-27 12:36:33

2016-12-27 09:10:29

JavaScript原型鏈繼承
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)