您現在的位置是:電腦技術吧?>? 故障問題 ??>??深入理解并行編程,深入理解python異步編程??>??正文詳情

深入理解并行編程,深入理解python異步編程

可美華2019-12-23 14:42:45 人圍觀
簡介并行編程語言本文主要介紹了對JavaScript編程中原型概念的深入理解,包括原型屬性的使用等相關知識。您可以引用JavaScript的原型對象,這總是令人困惑。甚至有經驗python 異步回調

這篇文章主要介紹了深入理解JavaScript編程中的原型概念,包括prototype屬性的使用等一些相關知識,需要的朋友可以參考下  JavaScript 的原型對象總是讓人糾結。

即使是經驗豐富的JavaScript專家甚至其作者,經常對這一概念給出很有限的解釋。

我相信問題來自于我們對原型最早的認識。

原型總是與new, constructor 以及令人困惑的prototype屬性緊密聯系。

事實上,原型是一個相當簡單的概念。

為了更好地理解它,我們需要忘記我們所學到'的構造原型,然后,追本溯源。

  什么是原型?  原型是一個從其他對象繼承屬性的對象。

  是不是任何對象都可以是原型?  是的  那些對象有原型?  每個對象都有一個默認的原型。

原型本身就是對象,每一個原型本身也存在一個原型。

(只有一個例外,默認的對象原型在每條原型鏈的頂端,其他的原型在原型鏈的后面)  退一步說,什么又是對象呢?  在JavaScript中一個對象是以鍵值對保存的任意的無序集合,如果它不是原始類(undefined,null,boolean.nuber或string),它就是一個對象。

  你可以認為每個對象都有一個prototype. 但當我寫({}).prototype的時候,我卻得到了undefined,你瘋不瘋?  忘記你所掌握的關于prototype屬性的理解 - 這很可能是迷惑的根源. 一個對象真正的prototype是內部[[Prototype]]屬性. ECMA 5介紹了標準的訪問方法,Object.getPrototypeOf(object)。

這個最新的實現已被Firefox, Safari, Chrome and IE9所支持. 另外,除了IE,所有的瀏覽器都支持非標準的訪問方法__proto__.不然的話,我們只能說對象的構造方法就是它的prototype屬性.  ? 1 2 3 4 5 6 7 8 9 10 11 var a = {}; //Opera 或 IE=8下失敗 Object.getPrototypeOf(a); //[object Object] //IE下失敗 a.__proto__; //[object Object] //所有瀏覽器 //(but only if constructor.prototype has not been replaced and fails with Object.create) a.constructor.prototype; //[object Object]   很好, false 是原始類型, 為什么false.__proto__ 會返回一個值呢?  當訪問原始類型的原型(prototype),它會強制轉化為一個對象。

  ? 1 2 //(works in IE=8 too, due to double-negative) false.__proto__ === Boolean(false).__proto__; //true   我想使用原型實現繼承,我現在該怎么做?  給一個實例添加原型屬性,幾乎是沒有意義的.除非一種情況,那就是,很有效率的添加屬性直接到實例本身.假設我們已經有了一個對象,要共享已經存在的對象的功能.例如Array,我們可以這樣做  ? 1 2 3 4 //fails in IE=8 var a = {}; a.__proto_ = Array.prototype; a.length; //0   但是我們可以看到原型的真正強大在于多個實例共享同一原型。

原型對象的屬性只被定義一次就可以被它引用的所有實例所繼承。

使用原型對性能和程序可維護性的提高效果是很顯而易見的。

那么這就是構造函數產生的原因嗎?是的,構造函數提供了一個便捷的跨瀏覽器機制來實現對實例創建時的公用原型分配。

  在給出一個例子之前,我需要知道constructor.prototype property是干什么的?  好吧,首先,JavaScript不區分構造函數和其它方法,所以每個方法都有prototype屬性。

反而任何不是方法的,都沒有這樣的屬性。

  ? 1 2 3 4 5 6 7 8 9 10 11 //永遠不是構造函數的方法,無論如何都是有prototype屬性的 Math.max.prototype; //[object Object] //構造函數也有prototype屬性 var A = function(name) { this.name = name; } A.prototype; //[object Object] //Math不是一個方法,所以沒有prototype屬性 Math.prototype; //null   現在可以定義: 一個方法的prototype屬性是當這個方法被用作構造函數來創建實例時賦給該實例的prototype的對象。

  非常重要的一點是,要理解方法的prototype屬性和實際的prototype沒有任何關系。

  ? 1 2 3 4 5 6 7 //(在IE中會失敗) var A = function(name) { this.name = name; } A.prototype == A.__proto__; //false A.__proto__ == Function.prototype; //true - A的prototype是它的構造函數的prototype屬性   能給個例子不?  以下的代碼,可能你已經看到或用過上百次了,但這里又把它搬上來了,但可能會有些新意。

  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //構造器. emthis/em 作為新對象返回并且它內部的[[prototype]]屬性將被設置為構造器默認的prototype屬性 var Circle = function(radius) { this.radius = radius; //next line is implicit, added for illustration only //this.__proto__ = Circle.prototype; } //擴充 Circle默認的prototype對象的屬性因此擴充了每個由它新建實例的prototype對象的屬性 Circle.prototype.area = function() { return Math.PI*this.radius*this.radius; } //創建Circle的兩個示例,每個都會使用相同的prototype屬性 var a = new Circle(3), b = new Circle(4); a.area().toFixed(2); //28.27 b.area().toFixed(2); //50.27   這很棒。

如果我改變了constructor的prototype屬性,即使是已存在的實例對象也可以立刻訪問新的prototype版本嗎?  嗯......不完全是。

如果我修改的是現存prototype的屬性后,那么確實是這種情況,因為對象創建時a.__proto__引用了A.prototype所定義的對象。

  ? 1 2 3 4 5 6 7 8 9 10 var A = function(name) { this.name = name; } var a = new A('alpha'); a.name; //'alpha' A.prototype.x = 23; a.x; //23   但是如果我將prototype屬性用一個新對象代替,a.__proto__ 仍然指向原始對象。

  ? 1 2 3 4 5 6 7 8 9 10 var A = function(name) { this.name = name; } var a = new A('alpha'); a.name; //'alpha' A.prototype = {x:23}; a.x; //null   一個缺省的prototype是什么樣的?  一個擁有constructor屬性的對象。

  ? 1 2 3 4 5 var A = function() {}; A.prototype.constructor == A; //true var a = new A(); a.constructor == A; //true (a 的constructor屬性繼承自它的原型)   instanceof與prototype有啥關系?  如果A的prototype屬性出現在a的原型鏈中,則表達式a instanceof A會返回true。

這意味著我們可以欺騙instanceof,讓它失效。

  ? 1 2 3 4 5 6 7 8 9 10 11 var A = function() {} var a = new A(); a.__proto__ == A.prototype; //true - so instanceof A will return true a instanceof A; //true; //mess around with a's prototype a.__proto__ = Function.prototype; //a's prototype no longer in same prototype chain as A's prototype property a instanceof A; //false   那么我還能利用原型干些其它的什么事兒?  記得我曾經說過每一個構造器都擁有一個prototype屬性,利用該屬性可以將原型賦值給所有由構造器產生的實例?其實這同樣適用于本地構造器,例如Function和String。

通過擴展(而不是替換)這個屬性,我們可以更新每個指定類型對象的prototype。

  ? 1 2 3 4 5 6 String.prototype.times = function(count) { return count 1 ? '' : new Array(count 1).join(this); } hello!.times(3); //hello!hello!hello!; please....times(6); //please...please...please...please...please...please...   告訴我更多關于繼承與原型是怎么工作的。

原型鏈又是什么東東?  因為每個對象和每個原型(本身)都有一個原型,我們可以想象, 一個接一個的對象連接在一起形成一個原型鏈。

原型鏈的終端總是默認對象(object)的原型。

  ? 1 2 3 4 a.__proto__ = b; b.__proto__ = c; c.__proto__ = {}; //默認對象 {}.__proto__.__proto__; //null   原型繼承機制是內在且隱式實現的。

當對象a要訪問屬性foo時,Javascript會遍歷a的原型鏈(首先從a自身開始),檢查原型鏈的每一個環節中存在的foo屬性。

如果找到了foo屬性就會將其返回,否則返回undefined值。

  直接賦值會咋樣?  當直接為對象屬性賦值時,原型繼承機制就玩不轉了。

a.foo='bar'會直接賦值給a的foo屬性。

要想為原型對象的屬性賦值,你需要直接定位原型對象的該屬性。

  關于javascript原型就講全了。

我覺得對于原型概念的理解,我把握的還是比較準確的,但是我的觀點無論如何也不是最后的結果。

請隨便告之我的錯誤之處或提出和我不一致的觀點。

版權聲明:本文由 可美華 整理編輯。

原標題:深入理解并行編程 pdf,深入理解并行計算

轉載注明出處:http://www.dn9ww09s.icu/fault/15647.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • 第一行代碼引用,excel代碼引用

    第一行代碼引用,excel代碼引用 相關圖片J引用文件本文主要介紹了利用requirejs優化JavaScript引用代碼的方法。Requirejs是一個流行的JS庫。您可以將requirejs作為一種有效的方法來MVC代碼更新所有引用報錯...

  • mac卸載軟件,mac safari打不開

    mac卸載軟件,mac safari打不開 相關圖片mac突然黑屏本文的示例描述了jQuery根據用戶的計算機是MAC還是PC加載相應樣式的方法,與您分享,以供參考。具體實現方法如下:?12345if(導航器。用戶代理。Indmac電腦黑屏怎么辦...

  • 對象比較大小,相對大小的對象

    對象比較大小,相對大小的對象 相關圖片cdr對象大小本文演示了JavaScript如何獲得指定對象的大小。與您分享以供參考。具體如下:?1234567891011用于驗證設置對象格式里面的大小...

  • input的name屬性,input標簽value

    input的name屬性,input標簽value 相關圖片input傳值這個例子展示了JavaScript如何獲取和更改輸入標記的name屬性。與您分享以供參考。具體實現方法如下:?12345678910121314151617輸入自定義標簽屬性...

  • 4大作用域,類的作用域

    4大作用域,類的作用域 相關圖片jsp作用域使用本文主要介紹了有關安古拉耶斯范圍的相關資料。請參閱“123456789101213141516171819202122!DOCTYPE HTMLHTML ng Java作用域...

  • 文件上傳實現,html實現文件上傳

    文件上傳實現,html實現文件上傳 相關圖片jsp文件上傳本文介紹了使用jQuery使用HTML5的formdata屬性上傳文件的方法和示例。這是非常實際的,可以參考所需的合作伙伴。一。使用jQuery通過HTML5的axios 文件上傳...

  • easyui datebox,easyui datagrid

    easyui datebox,easyui datagrid 相關圖片easyui的只讀屬性本文主要介紹了jquery.easyui中日期框時間的格式化方法。你可以為你的朋友參考下面的方法。這里沒有太多的廢話,代碼是直接呈現的:?123456美元。新生easyui什么時候該...

  • 怎么更換字體樣式,怎么換字體樣式

    怎么更換字體樣式,怎么換字體樣式 相關圖片word怎么更改樣式本文的示例描述了每天在JavaScript中定期更改皮膚樣式的方法。與您分享以供參考。具體分析如下:該JS代碼每天都會在不同的時間段自動改變web頁面調用的樣式word沒有更...

  • html驗證碼代碼,登錄界面的驗證碼代碼

    html驗證碼代碼,登錄界面的驗證碼代碼 相關圖片驗證碼源代碼本文介紹了一個用java代碼生成隨機圖片驗證碼的例子,可以直接配置成servlet,直接調用java代碼生成圖片驗證碼包com.rchm.util.images驗證碼怎么輸入才正確...

  • tab上面那個鍵叫什么,tab是鍵盤哪個鍵

    tab上面那個鍵叫什么,tab是鍵盤哪個鍵 相關圖片電腦tab鍵在哪本文的示例描述了JavaScript如何使textarea支持tab鍵。與您分享以供參考。具體實現方法如下:?1234567891013141516171819win鍵加tab...

熱評文章

  • 字符串怎么轉json,字符串轉json數組

    字符串怎么轉json,字符串轉json數組 相關圖片將json轉換為字符串本文主要介紹了JavaScript中字符串到JSON的兩種方法,一種是使用JS函數eval(),另一種是使用jQuery。Parsejson()。對于朋友,請參字符串和json的轉換...

  • 兩種方案對比分析方法,對比分析的文章

    兩種方案對比分析方法,對比分析的文章 相關圖片空調方案對比分析這是對Ajax中兩種JSON解析方法的比較分析,非常實用。本文是一篇學習筆記,一篇新手文章,歡迎指教!Eval();//此方法不建議使用JSON。Parse()施工方案對比分析...

  • redis緩存php,redis緩存機制php

    redis緩存php,redis緩存機制php 相關圖片redis緩存常用數據除了Memcache(一個常見的PHP操作類庫)之外,我們還可能非常熟悉內存緩存,即redis。我們與您分享的PHP技術文章是關于如何使用PHP操作redis,怎么使用redis緩存...

  • 數據庫應用,數據庫使用

    數據庫應用,數據庫使用 相關圖片數據庫什么用1、 在ASP中,用于訪問數據庫的對象稱為ADO(active data objects)。對象有三種:連接、記錄集和命令連接。他們負責打開或連接數據拿數據庫...

  • linux shell exec,linux的shell命令

    linux shell exec,linux的shell命令 相關圖片python調用shell經常會遇到操作部門需要清除緩存的情況,但緩存始終存在問題。這不是在電腦前處理的方法。我想到了一種通過訪問JSP page%@page language=Javalinux常用命令...

  • 應用程序是什么,安裝應用程序

    應用程序是什么,安裝應用程序 相關圖片手機應用程序在哪里Watchkit應用程序體系結構Watchkit應用程序是運行在Apple watch中的可執行文件。它包括腳本和渲染屏幕所需的資源文件。watchkit擴展是桌面應用程序...

  • ios框架,iOS相關框架

    ios框架,iOS相關框架 相關圖片ios網絡框架在Mac和iOS上,可可是一種快速、簡單、功能強大且靈活的日志記錄框架。Cocoa lumberjack與流行的日志框架(如log4j)類似,但它是為Objecios直播框架...

  • 子網掩碼和網關,子網掩碼 網關

    子網掩碼和網關,子網掩碼 網關 相關圖片ip地址子網掩碼網關怎么填本文采用JS對IP、子網掩碼、網關和MAC進行驗證。與您分享以供參考。具體如下:?123456789101314151617181920212223252627ip地址,子網掩碼,默認網關...

  • 什么是線程,java線程同步機制

    什么是線程,java線程同步機制 相關圖片進程和線程的區別本文主要介紹JavaScript線程和計時機制的相關信息。對于您的朋友,請參考setTimeout和setinterval的JavaScript API文檔,定java線程狀態...

  • 快速關鍵代碼,關鍵代碼段

    快速關鍵代碼,關鍵代碼段 相關圖片直接關機的代碼一。用于確定郵箱格式是否正確的代碼://verify-(bool)isvalidateemail:(nsstring*)email{nsstring*emailcnas關鍵代碼...

關注微信

变脸官网查询