JS – call/apply
function f() {
this.x = 333; // // this 指向 window
}
f();
alert(x);
var obj = {x: 999, y: 888, f: function() {
alert(this.x);
}};
obj.f(); // 999
var obj2 = {x: 111};
obj2.f = obj.f;
obj2.f(); // 111
function func() {
alert(this.name); // this 指向的是 window
}
var dog = { name: ‘a dog‘ };
dog.func(); // 错误, dog 里面没有 func 方法
var name = ‘I am window‘;
func.call(dog); // 输出 a dog
// 输出 I am window
func.call();
func.call(window);
function f(val) {
alert(this.name + ‘ val is ‘ + val);
}
function Dog(name) {
this.name = name;
}
var d = new Dog(‘a dog‘);
f.call(d, ‘abc‘);
// d 作为参数进入 f 就变成了里面的 this, abc 作为参数 传入 f(val) 中
f.apply(d, Array(‘a dog‘)); // apply 和 call 类似, 不过他呼叫的是参数是数组, 对于需要 arguments 的时候游泳