【js面試題】new操作做了什么?

這些年也面試了一些外包同事,不知道其他面試官的想法,但就我而言,我更喜歡聽到的是口述代碼的方式:

比如下述代碼

function Animal(age) {this.age = age; // 設置新對象的屬性
}const cat = new Animal("8");

最有效的回答就是把如下的代碼跟面試官口述一下:

// 相當于:/*1. const cat = {};2. cat.__proto__ = Animal.prototype;3. Animal.call(cat, "8");4. 返回 cat*/
console.log(cat.age); // "8"

在這里插入圖片描述

主要做了什么呢:

  1. new Animal(“8”) 創建了一個空對象 {}。
  2. 把這個空對象的“內部指針”指向 Animal.prototype(這就是 proto 的作用)。
  3. 把 this 綁定到這個新對象上,執行函數體(給對象加了 age 屬性)。
  4. 返回這個新對象,賦值給 cat

那么__proto__和prototype有什么區別

  1. prototype是函數都會有的一個屬性(對象),它包含了通過這個構造函數創建的實例可以擁有的屬性和方法,new對象時,新對象的__proto__(原型)會指向Animal(構造函數)的prototype。
  2. proto__是對象(普通對象、數組、函數等)的一個隱藏屬性,它指向了Animal(構造函數)的prototype(原型對象),如:訪問cat對象時,如果某個屬性找不到,它就會沿著__proto,去找Animal.prototype。

call如何理解

  1. call()、apply()、bind() 都是用來重定義 this 這個對象的
  2. call 的參數是直接放進去的,第二第三第 n 個參數全都用逗號分隔;bind 除了返回是函數以外,它 的參數和 call 一樣;apply 的所有參數都必須放在一個數組里面傳進去
const obj = {name: 'cat',age: this.age,fun: function(fromCity, toCity) {console.log(this.name + this.age, fromCity, toCity)}
}
const toThis = {name: 'dog',age: 18
}
obj.fun.call(toThis,'深圳','南通') // dog18 深圳 南通
obj.fun.apply(toThis,['深圳','南通']) // dog18 深圳 南通 
obj.fun.bind(toThis,'深圳','南通')() // dog18 深圳 南通 

在這里插入圖片描述

原型鏈和this指向是老生常談的知識點,反復看更容易記憶。

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

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

相關文章

freecad內部python來源 + pip install 裝包

cmake來源: 只能find默認地址,我試過用虛擬的python地址提示缺python3config.cmake python解釋器位置: python控制臺位置: pip install 裝包: module_to_install "your pakage" import os import FreeCAD …

樹和圖論【詳細整理,簡單易懂!】(C++實現 藍橋杯速查)

樹和圖論 樹的遍歷模版 #include <iostream> #include <cstring> #include <vector> #include <queue> // 添加queue頭文件 using namespace std;const int MAXN 100; // 假設一個足夠大的數組大小 int ls[MAXN], rs[MAXN]; // 定義左右子樹數…

展訊android15源碼編譯之apk單編

首先找到你要單編的apk生成的路徑&#xff1a; sys\out_system\target\product\ussi_arm64\system_ext\app\HelloDemo\HelloDemo.apk接著打開下面這個文件&#xff1a; sys\out_system\ussi_arm64_full-userdebug-gms.system.build.log在里面找關鍵字"Running command&q…

如何關閉MacOS中鼠標滾輪滾動加速

一、背景 想要關閉滾輪的 “滾動加速”&#xff0c;即希望滾動了多少就對應滾動頁面固定行數&#xff0c;現在macOS是加速滾動的&#xff0c;即滾動相同的角度會根據你滾動滾輪的速度不同最終頁面滾動的幅度不同。這點很煩&#xff0c;常導致很難定位。 macOS本身的設置是沒有…

河北工程大學e2e平臺,python

題目&#xff0c;選擇題包100分&#xff01; 題目&#xff0c;選擇題包100分&#xff01; 題目&#xff0c;選擇題包100分&#xff01; 聯系&#x1f6f0;&#xff1a;18039589633

【藍橋杯】貪心算法

1. 區間調度 1.1. 題目 給定個區間,每個區間由開始時間start和結束時間end表示。請選擇最多的互不重疊的區間,返回可以選擇的區間的最大數量。 輸入格式: 第一行包含一個整數n,表示區間的數量 接下來n行,每行包含兩個整數,分別表示區間的開始時間和結束時間 輸出格式:…

一維差分數組

2.一維差分 - 藍橋云課 問題描述 給定一個長度為 n 的序列 a。 再給定 m 組操作&#xff0c;每次操作給定 3 個正整數 l, r, d&#xff0c;表示對 a_{l} 到 a_{r} 中的所有數增加 d。 最終輸出操作結束后的序列 a。 ??Update??: 由于評測機過快&#xff0c;n, m 于 20…

二分答案----

二分答案 - 題目詳情 - HydroOJ 問題描述 給定一個由n個數構成的序列a&#xff0c;你可以進行k次操作&#xff0c;每次操作可以選擇一個數字&#xff0c;將其1&#xff0c;問k次操作以后&#xff0c;希望序列里面的最小值最大。問這個值是多少。 輸入格式 第一行輸入兩個正…

旋轉位置編碼

旋轉位置編碼&#xff08;Rotary Position Embedding&#xff0c;RoPE&#xff09;: 一種能夠將相對位置信息依賴集成到 self-attention 中并提升 transformer 架構性能的位置編碼方式。 和相對位置編碼相比&#xff0c;RoPE 具有更好的外推性&#xff0c;目前是大模型相對位…

.NET-EFCore基礎知識

.NET EF Core&#xff08;Entity Framework Core&#xff09;是微軟開發的一款開源的對象關系映射&#xff08;ORM&#xff09;框架&#xff0c;用于在.NET 應用程序中與數據庫進行交互。以下是一些.NET EF Core 的基礎知識&#xff1a; 1. 什么是 EF Core EF Core 是.NET 平…

利用 RNN 預測股票價格:從數據處理到可視化實戰

在金融領域&#xff0c;預測股票價格走勢一直是眾多投資者和研究者關注的焦點。今天&#xff0c;我們將利用深度學習中的循環神經網絡&#xff08;RNN&#xff09;來構建一個簡單的股票價格預測模型&#xff0c;并詳細介紹從數據加載、預處理、模型搭建、訓練到最終結果可視化的…

LangGraph 架構詳解

核心架構組件 LangGraph 的架構建立在一個靈活的基于圖的系統上&#xff0c;使開發者能夠定義和執行復雜的工作流。以下是主要架構組件&#xff1a; 1. 狀態管理系統 LangGraph 的核心是其強大的狀態管理系統&#xff0c;它允許應用程序在整個執行過程中維護一致的狀態&…

Python 深度學習實戰 第1章 什么是深度學習代碼示例

第1章&#xff1a;什么是深度學習 內容概要 第1章介紹了深度學習的背景、發展歷史及其在人工智能&#xff08;AI&#xff09;和機器學習&#xff08;ML&#xff09;中的地位。本章探討了深度學習的定義、其與其他機器學習方法的關系&#xff0c;以及深度學習在近年來取得的成…

swift菜鳥教程1-5(語法,變量,類型,常量,字面量)

一個樸實無華的目錄 今日學習內容&#xff1a;1.基本語法引入空格規范輸入輸出 2.變量聲明變量變量輸出加反斜杠括號 \\( ) 3.可選(Optionals)類型可選類型強制解析可選綁定 4.常量常量聲明常量命名 5.字面量整數 and 浮點數 實例字符串 實例 今日學習內容&#xff1a; 1.基本…

GAT-GRAPH ATTENTION NETWORKS(論文筆記)

CCF等級&#xff1a;A 發布時間&#xff1a;2018年 代碼位置 25年4月21日交 目錄 一、簡介 二、原理 1.注意力系數 2.歸一化 3.特征組合與非線性變換 4.多頭注意力 4.1特征拼接操作 4.2平均池化操作 三、實驗性能 四、結論和未來工作 一、簡介 圖注意力網絡&…

XML、JSON 和 Protocol Buffers (protobuf) 對比

目錄 1. XML (eXtensible Markup Language) 1&#xff09;xml的特點&#xff1a; 2&#xff09;xml的適用場景&#xff1a; 2. JSON (JavaScript Object Notation) 1&#xff09;JSOM的特點&#xff1a; 2&#xff09;JSON的適用場景&#xff1a; 3. Protocol Buffers (…

如何通過簡單步驟保護您的網站安全

在如今的數字化時代&#xff0c;網站安全已經成為每個網站管理者都不能忽視的重點。未授權用戶入侵、數據泄露和惡意軟件等威脅越來越多&#xff0c;網站安全對于保護企業、用戶和客戶的數據非常重要。為了幫助您提升網站的安全性&#xff0c;本文介紹了一些簡單且有效的措施&a…

【后端開發】初識Spring IoC與SpringDI、圖書管理系統

文章目錄 圖書管理系統用戶登錄需求分析接口定義前端頁面代碼服務器代碼 圖書列表展示需求分析接口定義前端頁面部分代碼服務器代碼Controller層service層Dao層modle層 Spring IoC定義傳統程序開發解決方案IoC優勢 Spring DIIoC &DI使用主要注解 Spring IoC詳解bean的存儲五…

通付盾風控智能體(RiskAgent): 神煩狗(DOGE)

在數字化業務高速發展的今天&#xff0c;風控系統已成為企業抵御黑產、欺詐、保障交易安全的核心防線。然而傳統風控面臨人力依賴高與策略滯后性等挑戰&#xff0c;數據分析師需每日從海量數據中手動提煉風險特征、設計防護規則&#xff0c;耗時費力&#xff1b;新策略從發現到…

大模型論文:Language Models are Unsupervised Multitask Learners(GPT2)

大模型論文&#xff1a;Language Models are Unsupervised Multitask Learners(GPT2) 文章地址&#xff1a;https://storage.prod.researchhub.com/uploads/papers/2020/06/01/language-models.pdf 摘要 自然語言處理任務&#xff0c;例如問答、機器翻譯、閱讀理解和摘要&am…