js的原型和原型鏈

構造函數創建對象:

function Person() {}
var person = new Person();
person.name = 'Kevin';
console.log(person.name) // Kevin

Person 就是一個構造函數,我們使用 new 創建了一個實例對象 person

prototype

每個函數都有一個 prototype 屬性
每一個JavaScript對象(null除外)在創建的時候就會與之關聯另一個對象,這個對象就是我們所說的原型,每一個對象都會從原型"繼承"屬性。

function Person() {}
// 雖然寫在注釋里,但是你要注意:
// prototype是函數才會有的屬性
Person.prototype.name = 'Kevin';
var person1 = new Person();
var person2 = new Person();
console.log(person1.name) // Kevin
console.log(person2.name) // Kevin

在這里插入圖片描述

proto

每一個JavaScript對象(除了 null )都具有的一個屬性,叫proto,這個屬性會指向該對象的原型

function Person() {}
var person = new Person();
console.log(person.__proto__ === Person.prototype); // true

在這里插入圖片描述

constructor

每個原型都有一個 constructor 屬性指向關聯的構造函數 實例原型指向構造函數

function Person() {}
console.log(Person === Person.prototype.constructor); // true

在這里插入圖片描述

function Person() {}var person = new Person();console.log(person.__proto__ == Person.prototype) // true
console.log(Person.prototype.constructor == Person) // true
// 順便學習一個ES5的方法,可以獲得對象的原型
console.log(Object.getPrototypeOf(person) === Person.prototype) // true

實例與原型

function Person() {}Person.prototype.name = 'Kevin';var person = new Person();person.name = 'Daisy';
console.log(person.name) // Daisydelete person.name;
console.log(person.name) // Kevin

在這個例子中,我們給實例對象 person 添加了 name 屬性,當我們打印 person.name 的時候,結果自然為 Daisy。

但是當我們刪除了 person 的 name 屬性時,讀取 person.name,從 person 對象中找不到 name 屬性就會從 person 的原型也就是 person.proto ,也就是 Person.prototype中查找,幸運的是我們找到了 name 屬性,結果為 Kevin。

原型與原型

var obj = new Object();
obj.name = 'Kevin'
console.log(obj.name) // Kevin

在這里插入圖片描述

原型鏈

console.log(Object.prototype.__proto__ === null) // true

在這里插入圖片描述
JavaScript 默認并不會復制對象的屬性,相反,JavaScript 只是在兩個對象之間創建一個關聯,這樣,一個對象就可以通過委托訪問另一個對象的屬性和函數,所以與其叫繼承,委托的說法反而更準確些

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249428.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249428.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249428.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二維數組

要求:求一個二維數組的最大子數組和 思路:對于這個題,我會最簡單的讀取,雖然在網上查到了代碼,但是查找最大子數組的循環我真的看不懂,也不是特別懂思路,所以在這不會寫思路 package 二維數組; …

資源

資源鏈接: 內存池TinySTLminiSTLcghSTL1. lishuhuakai 2. 轉載于:https://www.cnblogs.com/sunbines/p/9707483.html

Android判斷應用或Activity是否存在

一、根據包名判斷應用是否存在public boolean checkApplication(String packageName) { if (packageName null || "".equals(packageName)){ return false; } try { ApplicationInfo info getPackageManager().getApplicationInfo(packageName, PackageManager.GET…

vue ref

https://www.jianshu.com/p/623c8b009a85

033 Url中特殊字符的處理

在url跳轉頁面的時候,參數值中的#不見了,一直沒有處理,今天有空看了一下,后來發現后臺的過濾器之類的都沒有處理,就比較奇怪了,原來是特殊字符的問題。 一:Url中的特殊字符 1.說明 這里還是需要…

Effective Java(1)-創建和銷毀對象

Effective Java(1)-創建和銷毀對象 轉載于:https://www.cnblogs.com/Johar/p/10556218.html

什么是Affinity

什么是Affinity 在某些情況下,Android需要知道一個Activity屬于哪個Task,即使它沒有被啟動到一個具體的Task里。這是通過任務共用性(Affinities)完成的。任務共用性(Affinities)為這個運行一個或多…

vue this

https://blog.csdn.net/cddcj/article/details/80866902

課外書——自控力(斯坦福大學最受歡迎的心理學課程)

01我要做,我不要,我想要:什么是意志力?為什么意志力?為什么意志力至關重要? 核心思想: 意志力實際上是“我要做”、“我不要”和“我想要”這三種力量。它們協同努力,讓我們變成更好…

Docker運行GUI軟件的方法

轉自 https://www.csdn.net/article/2015-07-30/2825340 簡介: Docker通過namespace將容器與主機上的網絡和運行環境進行了隔離,默認情況下,在容器中運行帶界面的軟件在外部是看不到的。在這個分享中,將介紹通過共享X11套接字讓外…

JS正則表達式驗證數字非常全

驗證數字的正則表達式集 驗證數字:^[0-9]*$ 驗證n位的數字:^\d{n}$ 驗證至少n位數字:^\d{n,}$ 驗證m-n位的數字:^\d{m,n}$ 驗證零和非零開頭的數字:^(0|[1-9][0-9]*)$ 驗證有兩位小數的正實數:^[0-9](.[0-9…

VMware VIC

vSphere Integrated Containers - a short intro High-Level view of VCH Networking vSphere Integrated Containers Roles and Personas 參考鏈接:https://vmware.github.io/vic-product/assets/files/html/1.4/轉載于:https://www.cnblogs.com/vincenshen/p/9715…

vue new vue

https://www.jianshu.com/p/5ca5f40e4810

MySQL 之group_concat_max_length Mac 版

用過MySQL的人都知道,group_concat這個函數是有最大值限制的,當超過了最大值就會報錯! 在window下的處理方法就是修改MySQL的配置文件my.ini,在其中添加 #group_concat_max_len setting group_concat_max_len 1024000000 然…

Locust學習總結分享

簡介: Locust是一個用于可擴展的,分布式的,性能測試的,開源的,用Python編寫框架/工具,它非常容易使用,也非常好學。它的主要思想就是模擬一群用戶將訪問你的網站。每個用戶的行為由你編寫的py…

IDEA系列(四)一部署war 和 war exploded的區別

war模式:將WEB工程以包的形式上傳到服務器 ; war exploded模式:將WEB工程以當前文件夾的位置關系上傳到服務器;(1)war模式這種可以稱之為是發布模式,看名字也知道,這是先打成war包&a…

Vue常用7個屬性

https://www.cnblogs.com/bgwhite/p/9297221.html

初始Zookeeper

Zookeeper是一個分布式服務框架,據說是一個比較強大的架構模式,具體我也不甚了解,但是最近由于工作上的原因,需要部署一個Zookeeper服務,實現移動端一個簡單的發單、搶單功能。于是我便開始了解這個框架,將…

開發進度

項目名稱:信息技術手冊查重錯誤比對分析 功能概述: (1) 數據導入:要求將提供的信息技術手冊文檔倒入數據庫中 方法: 將word文檔中的內容復制到text中,利用notepad打開,利用正則表達…

Solr的安裝和使用

安裝 CentOS中先安裝好Java和Tomcat。準備工具IK Analyzer 2012FF 和Solr-4.10.3.tgz 將solr-4.10.3文件夾中dist中的solr-4.10.3.war文件復制到Tomcat的webapps,并且更名為solr.war,下開啟tomcat解壓后再關閉tomcat,再刪除solr.war。 將Solr…