js高階高階 手動實現call 函式

2021-10-01 07:53:34 字數 907 閱讀 7557

// 首先看下原生的js的call()

var obj =

}var obj2 =

console.log(obj.getname.call(obj2, 'hello, everyone, i am '))

// hello, everyone, i am evan you

// call()做了什麼?

// 1、將呼叫call的函式的this指向call函式的第乙個引數

// 2、將call()第乙個引數後的引數作為呼叫call函式的形參

function.prototype._call = function (context)

// 不使用call函式的實現

function.prototype._newcall = function (context)

context.fn = this

result = eval('context.fn(' + args + ')')

delete context.fn

return result

}console.log(obj.getname._newcall(obj2, 'hello, everyone, i am '));

// hello, everyone, i am evan you

// ecmascript6 的實現

function.prototype._es6call = function (context, ...args)

console.log(obj.getname._es6call(obj2, 'hello, everyone, i am '));

// hello, everyone, i am evan you

2020.05.15 修正函式呼叫call會有返回值

js高階高階 手動實現深拷貝函式

主要考察目標 資料型別校驗 迴圈引用 function deepclone data,hash new weakmap return instance var a var b deepclone a b.desc.age 100 console.log b console.log a js迴圈引用 ...

前端高階 實現call方法

call改變this指向的思考var age 13 function test test var myobj test.call myobj 22思考一 test函式為什麼可以呼叫call方法?test是建構函式物件,所以是函式也是物件 test沒有call方法,那麼就順著原型鏈網上查詢,發現 te...

js 高階回顧js

1 js高階 什麼是面向過程的程式設計?比如輪播圖 我們第一件事情幹嘛 第二件事情幹嘛。什麼是物件導向的程式設計?比如輪播圖 先是分析裡面有哪些物件,再是分析如何實現物件的功能 成員 什麼是面向函式的程式設計?功能封裝,函式重複呼叫。要從面向過程的思路轉換成物件導向的程式設計 比較難的過程 2 js...