call()方法
1 call() 可以实现函数调用
2 可以改变函数中this指向 第一个参数是要改变this的值
比较:(后续做详细比较)
call(obj,1,2) apply(obj,[1,2]) apply()同等于call()
bind(obj,1,2) 只绑定一个函数,不调用
function fun(a, b) {
console.log(this);
console.log(a, b);
console.log('好好学习!');
}
var obj = {
num: 100
};
fun(); // window.fun() 此时this === window
// 1 call() 可以实现函数调用
fun.call();
// 2 可以改变函数中this指向 第一个参数实现this的改变
fun.call(obj,10,20); //this 指向{num: 100}
示例:
function Fa(name, age) {
console.log(this);
this.name = name;
this.age = age;
}
//父亲原型上添加一个方法
Fa.prototype.getMoney = function() {
console.log(1000000);
}
function Son(name, age) {
// new Son的时候 this指向Son的实例Son{..}
Fa.call(this, name, age); // Fa()
}
//Son.prototype = Fa.prototype; //直接赋值不好,因为constructor指向Fa,并且父亲也有study方法
Son.prototype = new Fa('wjj', 23); // {name:'wjj',age:23,__proto__}
Son.prototype.constructor = Son;
//以上实现父亲方法的继承
// 儿子自己专用的方法
Son.prototype.study = function() {
console.log('haohaoxuexi');
}
var zyc = new Son('张有才', 22);
zyc.getMoney();
console.log(zyc.name, zyc.age);
/* 分析
Fa Fa.prototype ({constructor:Fa,getMoney:fun...})
^
|
Son Son.prototype
zyc.getMoney(); zyc.__proto__ === Son.prototype {name:'wjj',age:23,__proto__}
*/
图解分析: