Tess4J:基于 Java 的 OCR 解決方案

????????在現代軟件開發中,圖像識別與文本提取已成為許多應用場景中的關鍵環節。OCR(Optical Character Recognition) 技術使得從圖像中提取文字成為可能。Tess4J 是一個基于 Java 的 OCR 開發庫,它封裝了 Google Tesseract OCR 引擎的本地調用接口,使得 Java 開發者能夠輕松地在項目中集成圖像文字識別功能。
????????Tess4J 的核心優勢在于其對原生 Tesseract 庫的封裝,不僅簡化了 API 調用流程,還支持跨平臺使用(Windows、Linux、MacOS 等),是 Java 圖像識別領域的重要工具之一。

1. OCR 介紹

????????OCR(Optical Character Recognition,光學字符識別) 是一種將圖像中的文字內容轉換為可編輯、可搜索的文本格式的技術。它廣泛應用于從掃描文檔、照片、PDF 文件等圖像中提取文字信息,實現自動化數據處理和分析。其核心是通過圖像處理與模式識別算法來檢測圖像中的字符區域,并將其識別為計算機可理解的文本格式(如 ASCII 或 Unicode)。其主要流程包括:

  1. 圖像預處理:去噪、二值化、灰度處理等,提高識別準確性。
  2. 文字區域檢測:定位圖像中包含文字的區域。
  3. 字符分割:將連在一起的文字或單詞拆分為單個字符。
  4. 字符識別:使用機器學習模型或模板匹配技術識別每個字符。
  5. 后處理與輸出:優化識別結果并輸出為文本格式。

常見的 OCR 工具與服務:

工具/服務名稱

平臺/語言支持

支持語言

是否付費

特點說明

Tesseract OCR

跨平臺(C/C++),支持 Java(Tess4J)等封裝

英文為主,支持幾十種語言(需加載對應 tessdata 文件)

開源免費,適合本地部署,精度中等

Google Vision API

云端 REST API

多語言支持:英文、中文、日文、韓文、法語等(共約 50+ 種語言)

高精度識別,支持表格、手寫體、復雜排版,需網絡連接

百度 OCR

云端 API / SDK

中文、英文、數字、車牌、身份證、護照等特定場景

部分免費

中文識別強,適合國內應用場景,有免費額度限制

ABBYY FineReader

Windows / macOS

支持 190+ 種語言

商業軟件,識別準確率高,界面友好,價格較高

Microsoft Azure Computer Vision

云端 API

英文、中文、西班牙語、法語、德語、日語等主流語言

支持多語言和表格識別,集成于 Azure 生態

Amazon Textract

AWS 云端服務

英文、中文、西班牙語等

提取文檔中的文本、表格、表單結構,適合企業級文檔處理

OpenCV + 深度學習模型

自定義開發(Python、Java 等)

取決于訓練模型(可定制化)

靈活但開發門檻高,適合有 AI 能力的團隊

MyScript

Web / SDK

英文、中文、日文、阿拉伯語等

手寫識別能力強,適合教育、筆記類應用

PaddleOCR(百度飛槳)

Python / C++ / Java

支持中英文、數字、符號、多種字體

開源項目,輕量級,適合本地部署或自定義訓練

?2.?簡單驗證碼識別(無干擾項)使用步驟

1.?添加依賴

<dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>4.2.1</version>
</dependency>
<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.1</version>
</dependency>

2.?下載 Tesseract 數據

下載地址:https://github.com/tesseract-ocr/tessdata

這里以放在 resources/tessdata 目錄為例:

常見語言包列表及用途說明:

參考文檔:Traineddata Files for Version 4.00 + | tessdoc?

文件名

語言

備注

afr.traineddata

南非語 (Afrikaans)

——

amh.traineddata

阿姆哈拉語 (Amharic)

——

ara.traineddata

阿拉伯語 (Arabic)

——

asm.traineddata

阿薩姆語 (Assamese)

——

aze.traineddata

阿塞拜疆語 (Azerbaijani)

——

aze_cyrl.traineddata

阿塞拜疆語(西里爾字母)

Cyrillic 字符集

bel.traineddata

白俄羅斯語 (Belarusian)

——

ben.traineddata

孟加拉語 (Bengali)

——

bod.traineddata

藏語 (Tibetan)

——

bos.traineddata

波斯尼亞語 (Bosnian)

——

bre.traineddata

布列塔尼語 (Breton)

——

bul.traineddata

保加利亞語 (Bulgarian)

——

cat.traineddata

加泰羅尼亞語 (Catalan; Valencian)

——

ceb.traineddata

宿務語 (Cebuano)

——

ces.traineddata

捷克語 (Czech)

——

chi_sim.traineddata

中文簡體 (Chinese - Simplified)

常用字識別

chi_sim_vert.traineddata

中文簡體豎排

豎排文字識別

chi_tra.traineddata

中文繁體 (Chinese - Traditional)

——

chi_tra_vert.traineddata

中文繁體豎排

——

chr.traineddata

切羅基語 (Cherokee)

——

cym.traineddata

威爾士語 (Welsh)

——

dan.traineddata

丹麥語 (Danish)

——

dan_frak.traineddata

丹麥語(Fraktur 字體)

古德語字體風格

deu.traineddata

德語 (German)

——

deu_frak.traineddata

德語(Fraktur 字體)

——

div.traineddata

迪維希語 (Dhivehi)

——

dzo.traineddata

不丹語 (Dzongkha)

——

ell.traineddata

希臘語 (Greek, Modern)

——

eng.traineddata

英語 (English)

推薦使用

enm.traineddata

中古英語 (Middle English)

古英語識別

epo.traineddata

世界語 (Esperanto)

——

est.traineddata

愛沙尼亞語 (Estonian)

——

eus.traineddata

巴斯克語 (Basque)

——

fas.traineddata

波斯語 (Persian)

——

fao.traineddata

法羅語 (Faroese)

——

fra.traineddata

法語 (French)

——

frm.traineddata

中古法語 (Middle French)

——

fry.traineddata

弗里斯蘭語 (Western Frisian)

——

gla.traineddata

蘇格蘭蓋爾語 (Scottish Gaelic)

——

gle.traineddata

愛爾蘭語 (Irish)

——

glg.traineddata

加利西亞語 (Galician)

——

grc.traineddata

古希臘語 (Ancient Greek)

——

guj.traineddata

古吉拉特語 (Gujarati)

——

hat.traineddata

海地克里奧爾語 (Haitian; Haitian Creole)

——

heb.traineddata

希伯來語 (Hebrew)

——

hin.traineddata

印地語 (Hindi)

——

hrv.traineddata

克羅地亞語 (Croatian)

——

hun.traineddata

匈牙利語 (Hungarian)

——

hye.traineddata

亞美尼亞語 (Armenian)

——

iku.traineddata

因紐特語 (Inuktitut)

——

ind.traineddata

印度尼西亞語 (Indonesian)

——

isl.traineddata

冰島語 (Icelandic)

——

ita.traineddata

意大利語 (Italian)

——

ita_old.traineddata

意大利語(舊字體)

——

jav.traineddata

爪哇語 (Javanese)

——

jpn.traineddata

日語 (Japanese)

含平假名、片假名和常用漢字

jpn_vert.traineddata

日語豎排

——

kan.traineddata

卡納達語 (Kannada)

——

kas.traineddata

克什米爾語 (Kashmiri)

——

kat.traineddata

格魯吉亞語 (Georgian)

——

kat_old.traineddata

格魯吉亞語(舊字體)

——

kaz.traineddata

哈薩克語 (Kazakh)

——

khm.traineddata

高棉語 (Central Khmer)

——

kir.traineddata

吉爾吉斯語 (Kyrgyz)

——

kmr.traineddata

庫爾德語北部方言 (Northern Kurdish)

——

kor.traineddata

韓語 (Korean)

——

kor_vert.traineddata

韓語豎排

——

lao.traineddata

老撾語 (Lao)

——

lat.traineddata

拉丁語 (Latin)

——

lav.traineddata

拉脫維亞語 (Latvian)

——

lit.traineddata

立陶宛語 (Lithuanian)

——

ltz.traineddata

盧森堡語 (Luxembourgish)

——

mal.traineddata

馬拉雅拉姆語 (Malayalam)

——

mar.traineddata

馬拉地語 (Marathi)

——

mkd.traineddata

馬其頓語 (Macedonian)

——

mlt.traineddata

馬耳他語 (Maltese)

——

mon.traineddata

蒙古語 (Mongolian)

——

mri.traineddata

毛利語 (Maori)

——

msa.traineddata

馬來語 (Malay)

——

mya.traineddata

緬甸語 (Burmese)

——

nep.traineddata

尼泊爾語 (Nepali)

——

nld.traineddata

荷蘭語 (Dutch; Flemish)

——

nor.traineddata

挪威語 (Norwegian)

——

oci.traineddata

奧克西坦語 (Occitan)

——

ori.traineddata

奧里亞語 (Oriya)

——

osd.traineddata

方向與段落檢測

——

pan.traineddata

旁遮普語 (Eastern Punjabi)

——

pap.traineddata

帕皮阿門托語 (Papiamento)

——

pol.traineddata

波蘭語 (Polish)

——

por.traineddata

葡萄牙語 (Portuguese)

——

pus.traineddata

普什圖語 (Pashto)

——

que.traineddata

克丘亞語 (Quechua)

——

ron.traineddata

羅馬尼亞語 (Romanian; Moldavian; Moldovan)

——

rus.traineddata

俄語 (Russian)

——

san.traineddata

梵語 (Sanskrit)

——

sin.traineddata

僧伽羅語 (Sinhala)

——

slk.traineddata

斯洛伐克語 (Slovak)

——

slv.traineddata

斯洛文尼亞語 (Slovenian)

——

snd.traineddata

信德語 (Sindhi)

——

spa.traineddata

西班牙語 (Spanish; Castilian)

——

spa_old.traineddata

西班牙語(舊字體)

——

sqi.traineddata

阿爾巴尼亞語 (Albanian)

——

srp.traineddata

塞爾維亞語 (Serbian)

——

srp_latn.traineddata

塞爾維亞語(拉丁字母)

——

sun.traineddata

巽他語 (Sundanese)

——

swa.traineddata

斯瓦希里語 (Swahili)

——

swe.traineddata

瑞典語 (Swedish)

——

syr.traineddata

敘利亞語 (Syriac)

——

tam.traineddata

泰米爾語 (Tamil)

——

tat.traineddata

韃靼語 (Tatar)

——

tel.traineddata

泰盧固語 (Telugu)

——

tgk.traineddata

塔吉克語 (Tajik)

——

tgl.traineddata

他加祿語 (Tagalog)

——

tha.traineddata

泰語 (Thai)

——

tir.traineddata

提格利尼亞語 (Tigrinya)

——

ton.traineddata

湯加語 (Tonga)

——

tur.traineddata

土耳其語 (Turkish)

——

uig.traineddata

維吾爾語 (Uighur; Uyghur)

——

ukr.traineddata

烏克蘭語 (Ukrainian)

——

urd.traineddata

烏爾都語 (Urdu)

——

uzb.traineddata

烏茲別克語 (Uzbek)

——

uzb_cyrl.traineddata

烏茲別克語(西里爾字母)

——

vie.traineddata

越南語 (Vietnamese)

——

yid.traineddata

意第緒語 (Yiddish)

——

yor.traineddata

約魯巴語 (Yoruba)

——

3.?編寫識別代碼

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;import java.io.File;public static void main(String[] args) {String dataPath = "src/main/resources/tessdata";String imagePath = "src/main/resources/image/img.png";try {// 獲取本地圖片File file = new File(imagePath);// 創建Tesseract對象ITesseract tesseract = new Tesseract();// 設置字體庫路徑tesseract.setDatapath(dataPath);// 設置識別語言tesseract.setLanguage("eng");// 執行ocr識別String result = tesseract.doOCR(file);System.out.println("識別的結果為:" + result);} catch (Exception e) {e.printStackTrace();}
}

3.?復雜驗證碼識別(帶干擾項)使用步驟

1.?加入maven依賴

<dependency><groupId>org.openpnp</groupId><artifactId>opencv</artifactId><version>4.9.0-0</version>
</dependency>

2.?選擇和 maven 依賴相同版本的 opencv下載

?下載地址:https://sourceforge.net/projects/opencvlibrary/files/

以該示例為例,Windows 版本下載如下圖所示:

選擇下載位置后點擊安裝即可。?

選擇版本說明:

1. 點擊?Core.NATIVE_LIBRARY_NAME 常量:

2. 點擊?getNativeLibraryName() 方法:

這個就是要找的 dll 文件,即 opencv 的版本。這個常量根據 opencv 版本的不同,常量也隨之變化。

3.?帶干擾項驗證碼處理(灰度化、二值化等操作)

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;import java.io.File;
import java.io.IOException;public class CaptchaPreprocessor {static {//在使用OpenCV前必須加載Core.NATIVE_LIBRARY_NAME類,否則會報錯System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}public static void main(String[] args) throws IOException {String imagePath = "src/main/resources/img.png";String outputImagePath = "src/main/resources/img/img.png";String tessDataPath = "src/main/resources/tessdata";try {// 1. 使用 OpenCV 預處理圖像Mat src = Imgcodecs.imread(imagePath, Imgcodecs.IMREAD_COLOR);if (src.empty()) {System.err.println("無法加載圖像,請檢查路徑是否正確:" + imagePath);return;}Mat processed = new Mat();// 灰度化Mat gray = new Mat();Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);// 對比度增強(CLAHE)Mat clahe = new Mat();Imgproc.createCLAHE(2.0, new org.opencv.core.Size(8, 8)).apply(gray, clahe);// 自適應二值化Mat binary = new Mat();Imgproc.adaptiveThreshold(clahe, binary, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C,Imgproc.THRESH_BINARY, 11, 2);// 形態學操作去干擾線Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new org.opencv.core.Size(1, 3));Imgproc.morphologyEx(binary, processed, Imgproc.MORPH_OPEN, kernel);// 保存處理后的圖像File destF = new File(outputImagePath).getParentFile();if (!destF.exists()) {destF.mkdirs();}boolean success = Imgcodecs.imwrite(outputImagePath, processed);if (!success) {System.err.println("圖像保存失敗,請檢查路徑或 Mat 是否為空");}// 2. 使用 Tess4J 進行 OCR 識別ITesseract tesseract = new Tesseract();tesseract.setDatapath(tessDataPath); // 設置 tessdata 路徑tesseract.setLanguage("eng");         // 英文識別tesseract.setPageSegMode(7);          // 單行文本識別File imageFile = new File(imagePath);String result = tesseract.doOCR(imageFile);// 輸出識別結果System.out.println("識別結果: " + result.trim());} catch (Exception e) {System.err.println("識別失敗: " + e.getMessage());e.printStackTrace();}}
}

4. 配置 VM options,添加 -Djava.library.path=安裝位置\opencv\build\java\x64。(如果 java -jar 啟動的話,可以直接添加?-Djava.library.path=安裝位置\opencv\build\java\x64 或 --java.library.path=安裝位置\opencv\build\java\x64)

以配置 VM options 為例,具體操作流程如下圖所示:

關于配置?java.library.path 說明:

1. 在未配置 -Djava.library.path 之前啟動項目會報如下錯誤:

2. 點擊?ClassLoader.java:1863

從該圖可以看出,他讀取?java.library.path 和?sun.boot.library.path 這兩個路徑。所以說?-Djava.library.path 可以替換為 -Dsun.boot.library.path。

4. 執行測試

以下面這個圖片為例:

原圖片經過去噪、二值化等操作處理后:

識別結果為:

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

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

相關文章

Vue3 + JavaScript 父組件點擊按鈕觸發子組件事件方法

在 Vue 3 中&#xff0c;父組件點擊按鈕觸發子組件事件有以下三種常用方式&#xff1a; 方法 1&#xff1a;使用 ref 直接調用子組件方法&#xff08;推薦&#xff09; vue 復制 下載 <!-- 父組件 --> <template><button click"callChildMethod"…

超強人工智能解決方案套件InfiniSynapse:精準的業務理解、對各種數據源進行全模態聯合智能分析--部署安裝@Ubuntu22.04 @Docker

InfiniSynapse 通過自研的第二代LLM-Native RAG實現了企業業務的理解&#xff0c;精準的Schema召回保證數據的準確性。提供專門為大模型優化的InfiniSQL語言&#xff0c;從而可以更加準確的生成查詢語句&#xff0c;通過 InfiniSQL 引擎讓人類第一次對存儲在各種數據源的全模態…

解決國內無法加載谷歌驗證碼(reCAPTCHA):URL 重定向配置指南

解決國內無法加載谷歌驗證碼&#xff08;reCAPTCHA&#xff09;&#xff1a;URL 重定向配置指南 在搭建網站或使用某些應用時&#xff0c;經常會遇到需要調用谷歌驗證&#xff08;reCAPTCHA&#xff09;API 的情況。然而&#xff0c;由于網絡環境的特殊性&#xff0c;國內多數…

【Qt】如何使用QtInstallerFramework打包Qt程序

使用 Qt Installer Framework 可以將你的 Qt 程序打包成一個帶有安裝向導的安裝包&#xff0c;適用于 Windows、Linux 和 macOS 平臺。以下是完整的打包流程&#xff0c;以你當前開發的 ecgexport 應用為例。 &#x1f9f0; 一、準備工作 1. 安裝 Qt Installer Framework 下載…

如何編寫高效的Prompt:從入門到精通

在人工智能時代&#xff0c;特別是隨著大型語言模型(LLM)如ChatGPT、Claude等的普及&#xff0c;編寫高質量的Prompt(提示詞)已成為一項關鍵技能。一個好的Prompt可以顯著提高AI輸出的質量和相關性&#xff0c;而一個糟糕的Prompt可能導致無用甚至誤導性的結果。本文將帶你深入…

智慧工地云平臺源碼,基于微服務架構+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平臺系統&#xff0c;智慧工地全套源碼&#xff0c;java版智慧工地源碼&#xff0c;支持PC端、大屏端、移動端。 智慧工地聚焦建筑行業的市場需求&#xff0c;提供“平臺網絡終端”的整體解決方案&#xff0c;提供勞務管理、視頻管理、智能監測、綠色施工、安全管…

【機械視覺】Halcon—【十三、實例找各個區域面積和中心點】

找區域面積和中心點 *獲取圖像 read_image (Image, fabrik) *關閉窗口 dev_close_window () *打開窗口 dev_open_window (0, 0, 512, 512, black, WindowID) *設置輸出字體&#xff0c;14號字&#xff0c;Courier字體&#xff0c;粗體 set_display_font (WindowID, 14, mono, …

MongoDB 基礎

一、MongoDB 基礎概念 1. 什么是 MongoDB MongoDB 是一個文檔型數據庫&#xff0c;數據以類似 JSON 的文檔形式存儲&#xff0c;使用 BSON 格式。設計理念是應對大數據量1、高性能和靈活性需求。數據組織方式&#xff1a;數據庫→2集合→文檔&#xff0c;其中集合類似于關系型…

RNN:從記憶困境到序列建模革命

在自然語言處理的戰場上&#xff0c;一個句子中的每個單詞都承載著前文的記憶。當傳統神經網絡面對這種時序依賴束手無策時&#xff0c;循環神經網絡&#xff08;RNN&#xff09; 以獨特的循環結構開啟了序列建模的新紀元。它像人類閱讀般記憶上下文&#xff0c;卻也因記憶衰減…

陽臺光伏配套電表ADL200N-CT/D16-Wf-1

安科瑞 華楠 18706163979 引言 在“雙碳”目標推動下&#xff0c;綠色能源正逐步走進日常生活。陽臺光伏作為一種新型分布式發電方式&#xff0c;憑借靈活安裝、高效節能的特點&#xff0c;成為城市家庭和工商業用戶的新選擇。安科瑞推出的ADL200N-CT/D16-Wf-1陽光光伏電表&a…

功能測試—軟件的生命周期

市場需求調研 可行性研究 從企業的人力儲備、技術儲備、資金儲備等方面出發&#xff0c;論證經濟效益或者社會效益能否達到預期 項目立項 需求開發 輸出&#xff1a;需求規格說明書需求評審&#xff08;需求測試&#xff09;&#xff1a;測試&#xff08;測試負責人、資深測…

PostgreSQL 日常維護

目錄 前言 基本使用 1. 登錄數據庫 2. 數據庫操作 2.1 列出庫 2.2 創建庫 2.3 刪除庫 2.4 切換庫 2.5 查看庫大小 3. 數據表操作 3.1 列出表 3.2 創建表 3.3 復制表 3.4 刪除表 3.5 查看表結構 4. 模式操作命令 4.1 創建模式 4.2 默認模式 4.3 刪除模式 4.4…

STM32F4通用定時器TIM9-TIM14講解及PWM呼吸燈實例解讀

STM32F4通用定時器TIM9-TIM14講解及PWM呼吸燈實例解讀 前言小貼士 通用定時器原理定時器的內部時鐘源通用定時器TIM9-TIM14的對比共同點區別 TIM9-TIM14功能說明時基單元計數模式時鐘選擇 定時器框圖理解和分析TIM10/TIM11/TIM13/TIM14輸入捕獲輸出比較 TIM9和TIM12獨立通道輸入…

whttpserver:一個命令極速搭建文件上傳與下載服務器

whttpserver 是一個簡單的HTTP服務器&#xff0c;類似于python -m http.server&#xff0c;但增加了文件上傳和編輯的功能。 1. 安裝 whttpserver 模塊 # 臨時設置環境變量 PYTHONUTF81&#xff0c;強制 Python 使用 UTF-8 編碼 set PYTHONUTF81 pip install whttpserver 2.…

【0.2 漫畫操作系統原理】

??? 漫畫操作系統原理 ?? 學習目標:深入理解操作系統核心原理,為Java并發編程和性能優化打下堅實基礎 ?? 第一章:操作系統初識篇 ?? 什么是操作系統? 想象一下,你是一個大型圖書館的館長… ?? 沒有操作系統 vs 有操作系統沒有操作系統: 讀者1 → 直接找書架…

第1章 C# 和 .NET 框架 筆記

第1章 C# 和 .NET 框架 1.1 在 .NET 之前 C#為在.NET框架上開發程序而設計的編程語言。 MFC&#xff08;Microsoft Foundation Class&#xff0c;微軟基礎類庫&#xff09; 微軟公司提供的一個類庫&#xff0c;以 C 類的形式封裝了 Windows 的 API&#xff0c;并包含一個應…

Django全棧開發實戰與架構思考

一、框架選型與開發范式 作為Python生態最成熟的Web框架&#xff0c;Django的"電池全包"理念在2.3版本后得到更徹底的貫徹。項目初期通過django-admin startproject生成的腳手架已包含&#xff1a; 自動化ORM遷移系統 內置Admin后臺管理界面 基于WSGI的中間件管道…

微服務--Gateway網關

1. Gateway簡介 Gateway網關是微服務架構中不可或缺的組件&#xff0c;是微服務架構中的統一入口&#xff0c;它作為所有客戶端請求的第一道防線&#xff0c;負責請求的路由、過濾和聚合。 Gateway核心功能 路由(Routing) 根據請求路徑、Header、參數等將請求路由到不同微服…

區塊鏈與人工智能的融合:從信任到智能的IT新引擎

在信息技術&#xff08;IT&#xff09;的飛速發展中&#xff0c;兩大顛覆性技術的交匯正掀起一場革命——區塊鏈與人工智能&#xff08;AI&#xff09;的融合。2025年&#xff0c;隨著數據隱私需求的激增、去中心化應用的爆發以及企業對可信智能系統的追求&#xff0c;區塊鏈與…

Javascript什么是原型和原型鏈,八股文

原型:函數都有prototype屬性,稱之為原型&#xff0c;也稱為原型對象 原型可以放一些屬性和方法&#xff0c;共享給實例對象使用 原型可以做繼承 原型鏈:對象都有__proto__屬性,這個屬性指向它的原型對象,原型對象也是對象,也有__proto__屬性,指向原型對象的原型對象,這樣一層一…