关于call和apply在在实例化的时候使用问题
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
function Animals(name,food){
this.name = name;
this.food = food;
this.say = function(){
alert(this.name +'喜欢吃'+ this.food);
}
}
function dog(name,food){
this.name = name;
this.food = food;
};
var gou = new dog('狗狗','骨头');
var animal = new Animals();
animal.say.call(gou);//这个可以实现没问题,把狗当对象传入
// animal.say.call(dog,'狗狗','骨头');
//这个就是老师说的call后面传入的是方法,加参数1,参数2,为什么弹出的是dog喜欢吃undefined;不理解call在实例化使用方面该怎么传参。
</script>
</body>
</html>
还有个例子就是下一个题目两个数组相加的例子,arr1和arr2,实现方法是
arr1.push.apply(arr1,arr2);这里为什么要两个参数呢,数组的push方法里面只需要一个参数啊,就是要加入的新元素。如果说这里arr1只是起到占位作用,为什么我用空数组[]就过就显示为空呢。
正在回答
你好同学,解答如下:
1.call的第一个参数应该是对象,像 animal.say.call(gou);中的gou是一个实例化对象,所以没有问题。
而animal.say.call(dog, '狗狗', '骨头');中的dog是一个函数,正常情况下应该输出”undefined喜欢吃undefined ”。但是能够输出“dog喜欢吃undefined”中的dog是因为name的原因。函数有一个name属性,它获取的就是函数名称,即输出的是如下定义的函数名:
所以animal.say.call(dog, '狗狗', '骨头');是不正确的哦。
2.第二个问题同学说的是不是如下情况,可以参考理解,如果没有解答疑惑,可以把自己有疑惑的代码粘贴上来,以便老师准确的为你解答
祝学习愉快 ,望采纳。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星