學習前端第三十四天(call,apply,函數綁定;箭頭函數;對象屬性配置)

一、call、apply

function fn(x, y) {

? ? ? ? ? ? console.log("hello", x, y, this)

? ? ? ? };

1.call方法

作用:調用后執行函數,可以給“this”傳參數

? ? ? ? fn.call({ a: 1 }, 1, 2,);

2.apply方法

第一個給“this”傳參數,第二個參數需要是數組形式,然后與形式參數一一對應賦值

? ? ? ? fn.apply({ a: 2 }, [9, 3, 4, 5]);

3.區別

call可以傳多個參數,apply只能傳兩個參數,一個對象一個數組

4.借用

利用傳對象的特性用call方法對可迭代對象使用數組方法

        const str = "hello";let str2 = [].join.call(str, "-");console.log(str2); // h-e-l-l-o

二、函數綁定bind

1.復制函數,綁定參數

        'use strict'function fn(x, y) {console.log("hello", this, x, y)}const fn2 = fn.bind({ a: 1 })const fn3 = fn.bind({ a: 1 }, 1)const fn4 = fn.bind({ a: 1 }, 1, 2)fn(1, 2);  // 未進行綁定fn1(3, 4); // 綁定好了this參數,傳入的值會被賦值給x,yfn2(5);    // 綁定好了this參數和x的值,傳入的值會被賦值給yfn3();     // 綁定好了this參數,x的值,y的值

2.復制join方法并綁定方法的this

        const join = [].join.bind("abc");console.log(join("-"));  // a-b-cconsole.log(join(","));  // a,b,cconsole.log(join(";"));   // a;b;c

綁定join處理的字符串,自定義用何種方式連接字符串

三、箭頭函數

面試題:

? ? ? ? // 箭頭函數沒有局部變量“this”,this會向上層找

? ? ? ? // 箭頭函數沒有“arguments”(收集實際參數)

? ? ? ? // 不能使用new調用

四、對象配置屬性

1.屬性標志和屬性描述符

Object.getOwnPropertyDescriptor?方法允許查詢有關屬性的?完整?信息。

?Object.getOwnPropertyDescriptors(obj)?方法,一次獲取所有屬性描述符

  • writable?— 如果為?true,則值可以被修改,否則它是只可讀的。
  • enumerable?— 如果為?true,則會被在循環中列出,否則不會被列出。
  • configurable?— 如果為?true,則此屬性可以被刪除,這些特性也可以被修改,否則不可以。
        const user = {username: "jack",age: 20,};// 對對象的一個屬性細節修改,給不存在的屬性進行修改會新增改屬性Object.defineProperty(user, "username", {value: "ll",writable: false,configurable: false,enumerable: false,})Object.defineProperty(user, "uname", {value: "llwe",writable: false,configurable: false,enumerable: false,})// 可寫性;可遍歷性;可刪除性   console.log(Object.getOwnPropertyDescriptor(user, "username")); // 一次獲取所有屬性描述符

?Object.defineProperties(obj, descriptors),允許一次定義多個屬性。

        // 對當前對象進行批量修改,添加Object.defineProperties(user, {size: {value: 20,writable: false,configurable: true,enumerable: false,},hobby: {value: ["css", "html"]},});

Object.freeze(obj),禁止添加/刪除/更改屬性。為所有現有的屬性設置?configurable: false, writable: false

2.屬性的 getter 和 setter

有兩種類型的對象屬性。

第一種是?數據屬性

第二種類型的屬性。?訪問器屬性。用于獲取和設置值的函數,但從外部代碼來看就像常規屬性。

  • get?—— 一個沒有參數的函數,在讀取屬性時工作,
  • set?—— 帶有一個參數的函數,當屬性被設置時調用,
let user = {name: "John",surname: "Smith",get fullName() {return `${this.name} ${this.surname}`;},set fullName(value) {[this.name, this.surname] = value.split(" ");}
};// set fullName 將以給定值執行
user.fullName = "Alice Cooper";alert(user.name); // Alice
alert(user.surname); // Cooper

實際應用:

        const user = {gender: 2,get cnGender() {const obj = { 1: "男", 2: "女" };return obj[this.gender]},set cnGender(value) {const obj = { 男: 1, 女: 2 }this.gender = obj[value];}}console.log(user.cnGender);user.cnGender = "男";console.log(user.cnGender);

當讀取cnGender時,會根據gender的值輸出cnGender;

修改cnGender時,會通過函數對應關系修改gender值,然后輸出cnGender時,會根據gender修改的值輸出cnGender。

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

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

相關文章

ElementUi中el-table組件使用row-class-name修改指定行顏色

可以通過指定 Table 組件的 row-class-name 屬性來為 Table 中的某一行添加 class,表明該行處于某種狀態。 注意:如果在el-table中使用了stripe這個屬性,這個屬性是帶斑馬紋的表格樣式,它和row-class-name共存時是沒有效果。 注…

【微信開發】微信支付前期準備工作(申請及配置)

1、申請并配置公眾號或微信小程序 1.1 賬戶申請 通過微信公眾平臺,根據指引申請微信小程序或公眾號,申請時需要微信認證,申請流程不在贅述 1.2 信息配置 申請通過后,需進入小程序和公眾號內進行信息配置 1.2.1 小程序信息配置…

Mac YOLO V9推理測試(基于ultralytics)

環境: Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、準備工作 使用YOLO一般都會接觸ultralytics這個框架,今天來試試用該框架進行YOLO V9模型的推理。 YOLOv9目前提供了四種模型下載:yolov9-c.pt、yolov9-e.pt、gelan-c.p…

lint 代碼規范,手動修復,以及vscode的第三方插件eslint自動修復

ESlint代碼規范 不是語法規范,是一種書寫風格,加多少空格,縮進多少,加不加分號,類似于書信的寫作格式 ESLint:是一個代碼檢查工具,用來檢查你的代碼是否符合指定的規則(你和你的團隊可以自行約定一套規則)…

【管理篇】如何橫向溝通?

目錄標題 什么是橫向溝通?常見溝通問題 如何處理橫向溝通中的問題? 什么是橫向溝通? 所謂橫向溝通,就是和沒有直接匯報關系的合作方之間的溝通,指的是與平級間進行的與完成工作有關的交流;橫向溝通核心的挑…

mqtt定時腳本

需求描述 給mqtt的topic發送信息 對應的topic接收請求后,執行發送短信指令 信息內容 SMS,10086,102 lua的mqtt里面,截取判斷即可 –>可以實現 定時任務, 每月開機一次 發短信? 或者使用開機通知? 定時消費…

Npm Install Docusaurus Demo【npm 安裝 docusaurus 實踐 】

文章目錄 1. 簡介2. 前提2.1 安裝 git2.2 安裝 node 3. 安裝4. 項目結構5. 訪問5.1 localhost 訪問5.2 ip 訪問 1. 簡介 Docusaurus 是一個facebook的開源項目,旨在幫助開發者構建易于維護和部署的文檔網站。它提供了一個簡單的方法來創建專業的文檔網站&#xff0…

共享旅游卡免費旅游真實反饋,有圖有真相?

新伙伴體驗,云南昆大麗6天5晚品質雙人游,真實反饋!珠海伙伴蔡總,加入千益暢行共享旅游卡團隊,自己親自體驗“云南昆大麗6天5晚品質雙人游”真實反饋,分享全程內容截圖,無半點虛假! …

2024-05-08 postgres-調試及分析-記錄

摘要: 2024-05-08 postgres-調試及分析-記錄 DDL: 創建庫表及插入數據: create database d1;\c d1;create table t1( a int, b int ); create table t2( a int, b int );insert into t1(a,b) values(3,4); insert into t1(a,b) values(5,6);insert into t2(a,b) va…

MongoDB聚合運算符:$trim

MongoDB聚合運算符&#xff1a;$trim 文章目錄 MongoDB聚合運算符&#xff1a;$trim語法使用空白字符 舉例 $trim用來刪除字符串開頭和結尾的空白字符&#xff08;包括空值&#xff09;或指定字符。 語法 { $trim: { input: <string>, chars: <string> } }input&…

react經驗15:拖拽排序組件dnd-kit的使用經驗

應用場景 列表中的成員可鼠標拖拽改變順序 實施步驟 前置引入 import type { DragEndEvent } from dnd-kit/core import { DndContext } from dnd-kit/core import {arrayMove,/*垂直列表使用verticalListSortingStrategy,橫向列表使用horizontalListSortingStrategy*/vert…

springboot引入security,測試接口報Unauthorized

1、報錯截圖 2、當前項目pom文件引入security <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-security</artifactId><version>2.2.2.RELEASE</version> </dependency> 3、解決…

數據結構之圖——探索圖論的奧秘

前言 在這篇文章中&#xff0c;我們一起來看看我們生活中都會用到&#xff0c;但卻不那么熟悉的數據結構——圖&#xff08;英語&#xff1a;graph&#xff09;。我們看下百科定義&#xff1a; 在計算機科學中&#xff0c;圖&#xff08;英語&#xff1a;graph&#xff09;是一…

計算機畢業設計 | vue+springboot汽車銷售管理系統(附源碼)

1&#xff0c;項目介紹 本項目基于spring boot以及Vue開發&#xff0c;前端實現基于PanJiaChen所提供的開源后臺項目vue-element-admin改造。 針對汽車銷售提供客戶信息、車輛信息、訂單信息、銷售人員管理、財務報表等功能&#xff0c;提供經理和銷售兩種角色進行管理。 2&…

某MBTI性格測試系統后臺Getshell

在淘寶購買了性格測試系統源代碼進行環境部署,后進行滲透測試 淘寶源碼鏈接:https://item.taobao.com/item.htm?ftt&id790798788255 (自己學習(代碼審計、算法、環境搭建)知識技能提升) 環境準備 集成環境選的是小皮 phpstudy 創建網站,將源代碼放入網站根目錄配置好數據…

Doris【部署 01】Linux部署MPP數據庫Doris穩定版(下載+安裝+連接+測試)

本次安裝測試的為穩定版2.0.8官方文檔 https://doris.apache.org/zh-CN/docs/2.0/get-starting/quick-start 這個簡短的指南將告訴你如何下載 Doris 最新穩定版本&#xff0c;在單節點上安裝并運行它&#xff0c;包括創建數據庫、數據表、導入數據及查詢等。 Linux部署穩定版Do…

ElasticSearch的python api以及dev tool方式的基本操作

一、環境要求 根據es服務器版本&#xff0c;下載es的python api包&#xff0c;我們這里的環境為&#xff1a; python3.8, 下載的elastic search版本為7.6.0&#xff0c;安裝方式&#xff1a; pip install elasticsearch7.6.0二、es操作及python代碼 1、獲取es實例&#xff0…

LeetCode 每日一題 2024/5/6-2024/5/12

記錄了初步解題思路 以及本地實現代碼&#xff1b;并不一定為最優 也希望大家能一起探討 一起進步 目錄 5/6 741. 摘櫻桃5/7 1463. 摘櫻桃 II5/8 2079. 給植物澆水5/9 2105. 給植物澆水 II5/10 2960. 統計已測試設備5/11 2391. 收集垃圾的最少總時間5/12 5/6 741. 摘櫻桃 從起點…

當下是風口的熱門兼職副業,月入3萬問題不大,附保姆教程!

近年來&#xff0c;短視頻行業呈現出迅猛的發展勢頭&#xff0c;已經成為當下最受歡迎的一種形式。甚至連曾經的電商巨頭京東也開始積極布局這一領域&#xff0c;投入巨資20億元進行深入耕耘。 周周近財&#xff1a;讓網絡小白少花冤枉錢&#xff0c;賺取第一桶金 不知道您是…

第 8 章 機器人底盤Arduino端入口(自學二刷筆記)

重要參考&#xff1a; 課程鏈接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 講義鏈接:Introduction Autolabor-ROS機器人入門課程《ROS理論與實踐》零基礎教程 8.4.2 底盤實現_01Arduino端入口 ros_arduino_bridge/ros_arduino_firmware/src/libraries/ROSArduinoBridge…