JavaScript-call/apply 男娘i 2022-05-26 22:13 266阅读 0赞 **call/apply:改变this的指向** function Person(name,age) { this.name=name; this.age=age; } var obj={ } Person.call(obj,'cyl',19); 猜猜会发生什么? **![70][]obj里面居然有属性了?** 没错就是call的功劳,用别人的构造函数来成全自己,call的第一个参数放一个对象进出,然后call能把调用它的构造函数里面的this变成第一个参数,其他参数一样。 则上面变成 function **Person** ( name , age ) \{ obj . name = name ; obj . age = age ; \} 成全了obj。 那这个有什么用了? 看一下如下代码: function Person(name,age,sex) { this.name=name; this.age=age; this.sex=sex; } function Student(name,age,sex,grade,tel) { this.name=name; this.age=age; this.sex=sex; this.grade=grade; this.tel=tel; } 看着很麻烦,而且写了很多重复代码,哎浪费时间,call可以很好的解决。 function Person(name,age,sex) { this.name=name; this.age=age; this.sex=sex; } function Student(name,age,sex,grade,tel) { Person.call(this,name,age,sex); this.grade=grade; this.tel=tel; } 很好的利用call的特性,成全了Student apply和call非常相似,功能一样,apply第一个参数是一样的,但是后面一个必须传一个实参列表,不像call那样一个一个的传。 function Person(name,age,sex) { this.name=name; this.age=age; this.sex=sex; } function Student(name,age,sex,grade,tel) { Person.apply(this,[name,age,sex]); this.grade=grade; this.tel=tel; } 打个括号就完事咯,记住顺序不要瞎改。 [70]: /images/20220527/a1f32f91df5c47108297e979911f3c59.png
还没有评论,来说两句吧...