我们通常使用call 来 修改某个对象的指向,但是你了解其中的原理吗?
1.首先所有构造函数都能使用,说明什么?
其实call 本身是构造函数原型上的一个方法 即(Function.prototype上的方法)
2.为什么能使用传入的对象中的属性呢?
实则是在传入的对象中,又声明了此构造函数(函数),则构造函数中就能使用此对象中的属性啦
明白了这两点,我们就开始实现咯,上代码!
Function.prototype.newCall =function(obj,...args){
// this 实则就是 构造函数(函数)本身,把其构造函数,添加到这个对象身上
obj.getName =this
// 执行此对象身上,所对应的构造函数,并把值传给他
obj.getName(...args)
// 之后呢,因为我们手动修改添加了属性,到最好使用完了,同样也要删除,不能改变原来的对象
delete obj.getName
return
}
var a ={
name:'啦啦啦'
}
function A(age,sex){
console.log(age)
console.log(sex)
console.log(this.name)
}
A.newCall(a,12,'男') // 12,'男','啦啦啦'
总结: 实际上,就是在对象中,添加了此函数,然后执行了此函数,所以函数才能拿到对象中的属性或者方法咯