答: this 就是乙個物件。不同情況下 this 指向的不同,有以下幾種情況。
答:
var obj =
}// 通過物件的方式呼叫函式
obj.
print()
;// this 指向 obj
function
print()
// 全域性呼叫函式
print()
;// this 指向 window
function
person
(name, age)
var xiaolu =
newperson
('deer',22
);// this = > xaiolu
const obj =
}// 物件呼叫箭頭函式
obj.a(
);// window
var obj =
function
print()
// 通過 call 改變 this 指向,列印出來是obj的json
print.
call
(obj,1,
2,3)
;print.
(obj,[1
,2,3
]);// 通過 bind 改變 this 的指向,列印出來是obj的json
let fn = print.
bind
(obj,1,
2,3)
;fn()
;
如果我們使用上邊的方法改變箭頭函式的 this 指標,會發生什麼情況呢?能否進行改變
// this 為呼叫的函式
// context 是引數物件
function.prototype.
mycall
=function
(context)
// 不傳參預設為 window
context = context || window
// 新增 fn 屬性,將值設定為需要呼叫的函式
context.fn =
this
// 將 arguments 轉化為陣列將 call 的傳參提取出來 [...arguments]
const args = array.
from
(arguments)
.slice(1
)// 傳參呼叫函式
const result = context.fn(
...args)
// 刪除函式
delete context.fn
// 返回執行結果
return result;
}
function.prototype.
=function
(context)
// 不傳參預設為 window
context = context || window
// 新增 fn 屬性,將值設定為需要呼叫的函式
context.fn =
this
// 返回執行結果
let result;
// 判斷是否有引數傳入
if(arguments[1]
)else
// 刪除函式
delete context.fn
// 返回執行結果
return result;
}// 普通函式
function
(age,age2,age3)
// 自定義物件
var obj =
// 呼叫函式的 call 方法
print.
(obj,[1
,2,3
])
// 手寫乙個 bind 函式
function.prototype.
mybind
=function
(context)
// 擷取傳遞的引數
const args = array.
from
(arguments)
.slice(1
)// _this 指向呼叫的函式
const _this =
this
;// 返回乙個函式
return
functionf(
)else}}
// 普通函式
function
print()
// 自定義物件
var obj =
// 呼叫函式的 call 方法
letf
= print.
mybind
(obj,1,
2,3)
;// 返回物件
let obj1 =
newf()
;console.
log(obj1)
;
PHP儲備知識
php常見的執行模式 mod php 即apache的php模組。把php嵌入到apache中,相當於給apache加入了解析php檔案的功能 cgi 不太了解 fastcgi 不太了解 get和post的區別 get 把引數放在url中,有長度限制。post 請求的資料理論上沒有長度限制。在htt...
知識儲備 Android ADB介紹
android adb總體概述 adb android debug bridge,位於 sdk plaform tools目錄下,path環境變數中要配置這一路徑的原因主要是要用到adb 是android sdk中的乙個除錯工具,利用adb這個除錯工具可以直接操作管理android模擬器或者真實的a...
框架儲備知識1
一 mvc與三層架構 1.三層架構 a ui層 介面層 直接與使用者互動的層 簡單介面邏輯在此層處理 業務 相關邏輯向下呼叫service層 b service層 業務層 與資料操作無關的業務,完全在此層處理 與數 據操作相關的業務 混合業務,需向下呼叫dao層 c dao層 資料層 運算元據庫,將...