JSはappyとcallを実現します
1054 ワード
基本的な考え方としては、関数を一時的に借りて、実行後すぐに削除します.パラメータの処理が必要です.
function Person() {
this.name = " "
}
Person.prototype.print = function(age, city) {
console.dir(` :$ {
this.name
}, :$ {
age
}, :$ {
city
}`);
}
const person = new Person();
person.print(18, " ");
// call
function _call() {
let[o, ...args] = arguments;
o.fn_tmp = this; // this , ._call
o.fn_tmp(...args);
delete o.fn_tmp; // ,
}
Function.prototype._call = _call;
// apply
function _apply(obj, arr) {
if (! (arr instanceof Array)) {
throw " "
}
obj.fn_tmp = this;
obj.fn_tmp(...arr);
// ES6, , eval 。
delete obj.fn_tmp
}
Function.prototype._apply = _apply;
//
const obj = {
name: "nh"
}
person.print._call(obj, 20, " ");
person.print._apply(obj, [21, " "]);
console.dir(obj);
私のホームページ:https://blog.csdn.net/qq_29750277、フロントエンド(Vue、electron…)、Pythonなどがあります.