国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javascript中從學習bind到實現bind的過程

2024-05-06 15:22:52
字體:
來源:轉載
供稿:網友

bind是什么

bind()方法創建一個新的函數, 當被調用時,將其this關鍵字設置為提供的值,在調用新函數時,在任何提供之前提供一個給定的參數序列。

var result = fun.bind(thisArg[, arg1[, arg2[, ...]]]) result(newArg1, newArg2...)

沒看懂沒事接著往下看。

bind到底做了什么

從上面的介紹中可以看出三點。首先調用bind方法會返回一個新的函數(這個新的函數的函數體應該和fun是一樣的)。同時bind中傳遞兩個參數,第一個是this指向,即傳入了什么this就等于什么。如下代碼所示:

this.value = 2var foo = {  value: 1}var bar = function() { console.log(this.value)}var result = bar.bind(foo)bar() // 2result() // 1,即this === foo

第二個參數為一個序列,你可以傳遞任意數量的參數到其中。并且會預置到新函數參數之前。

this.value = 2var foo = {  value: 1};var bar = function(name, age, school) { console.log(name) // 'An' console.log(age) // 22 console.log(school) // '家里蹲大學'}var result = bar.bind(foo, 'An') //預置了部分參數'An'result(22, '家里蹲大學') //這個參數會和預置的參數合并到一起放入bar中

我們可以看出在最后調用 result(22, '家里蹲大學') 的時候,其內部已經包含了在調用bind的時候傳入的 'An'。

一句話總結:調用bind,就會返回一個新的函數。這個函數里面的this就指向bind的第一個參數,同時this后面的參數會提前傳給這個新的函數。調用該新的函數時,再傳遞的參數會放到預置的參數后一起傳遞進新函數。

自己實現一個bind

實現一個bind需要實現以下兩個功能

返回一個函數,綁定this,傳遞預置參數

bind返回的函數可以作為構造函數使用。故作為構造函數時應使得this失效,但是傳入的參數依然有效

1、返回一個函數,綁定this,傳遞預置參數

this.value = 2var foo = {  value: 1};var bar = function(name, age, school) {  console.log(name) // 'An'  console.log(age) // 22  console.log(school) // '家里蹲大學'  console.log(this.value) // 1}Function.prototype.bind = function(newThis) {  var aArgs  = Array.prototype.slice.call(arguments, 1) //拿到除了newThis之外的預置參數序列  var that = this  return function() {    return that.apply(newThis, aArgs.concat(Array.prototype.slice.call(arguments)))    //綁定this同時將調用時傳遞的序列和預置序列進行合并  }}var result = bar.bind(foo, 'An')result(22, '家里蹲大學')

這里面有一個細節就是Array.prototype.slice.call(arguments, 1) 這句話,我們知道arguments這個變量可以拿到函數調用時傳遞的參數,但不是一個數組,但是其具有一個length屬性。為什么如此調用就可以將其變為純數組了呢。那么我們就需要回到V8的源碼來進行分析。#這個版本的源碼為早期版本,內容相對少一些。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 云安县| 牟定县| 周至县| 榕江县| 霍邱县| 交城县| 西和县| 天门市| 孟连| 靖安县| 施甸县| 丹东市| 博罗县| 新巴尔虎左旗| 正镶白旗| 扎兰屯市| 登封市| 永泰县| 孝义市| 那曲县| 阳谷县| 宝鸡市| 广灵县| 卓尼县| 大庆市| 太保市| 仪征市| 广元市| 稷山县| 大埔区| 驻马店市| 巫溪县| 阆中市| 于都县| 含山县| 汽车| 江山市| 精河县| 遂川县| 临湘市| 石柱|