js

JS–Call继承

Function.prototype.call=function () {
this 表示的是实例 f1
把arguments变成数组
var ary=[…arguments];
if(ary[0]==undefined){
没传,null,undefined
让this执行里面的this变成window
ary.shift();
eval(“this(“+ary+”)”);
}else {
//将传进来的参数变成一个对象
var obj=Object(arguments[0]);
给obj所属类的原型上增加一个属性,属性值就是this
obj.proto.fn=this;
ary.shift();
eval(“obj.fn(“+ary+”)”);
将增加的属性删除
delete obj.proto.fn;
}
};

var obj={a:1};
function f1(m,n) {
console.log(this);
console.log(m,n);
}
f1.call(obj,2,5);

Object方法,将你传进来的东西变成一个对象返回

Function.prototype.call=function(){
var ary=[…arguments];
ary.shift();
if(arguments[0]==undefined){
this(…ary); //展开里面的每一项
return;
}
var obj=Object(arguments[0]);
obj.fn=this;
this(…ary);
delete obj.fn
}