call:函数.call(对象,参数) 将函数中的this指向对象,并且直接执行函数,参数要一一传递
function demo(){
console.log(this);
}
var obj = {
name:'1',
age:2,
// fn: demo;
}
Function.prototype.mycall = function(){
var fn = arguments[0]||window;
var target = Array.from(arguments).slice(1);
fn.add= this;
fn.add(...target);
}
demo.mycall(obj)
demo.call(obj)
apply:函数.apply(对象,数组) 将函数中的this指向对象,并且直接执行函数,参数以数组的形式传递
function demo(){
console.log(this);
}
var obj = {
name:'1',
age:2,
// fn: demo;
}
Function.prototype.myapply = function(){
var target = arguments[0]||window;
var fn = arguments[1];
target.add =this;
target.add(...fn)
}
demo.myapply(obj,[1,2])
demo.apply(obj,[1,2 ])
bind:函数.bind(对象,参数) 返回一个新函数,将新函数中的this指向对象
function demo(){
console.log(this);
}
var obj = {
name:'1',
age:2,
// fn: demo;
}
Function.prototype.mybind = function(){
var target = arguments[0]||window;
var add = Array.from(arguments).slice(1);
var ty =this;
return function(){
var arg = Array.from(arguments);
target.fn = ty;
target.fn(...(add.concat(arg)))
}
}
var cc = demo.mybind(obj);
cc()
var aa = demo.bind(obj);
aa()