forked from WsmDyj/Interview
-
Notifications
You must be signed in to change notification settings - Fork 0
/
call.js
63 lines (53 loc) · 1.06 KB
/
call.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// 不使用call、apply、bind,如何用js实现call或者apply功能
// call() 方法在使用一个指定的this值和若干个指定的参数值的前提下条用某个函数或方法
var foo = {
value: 1
}
function bar() {
console.log(this.value)
}
bar.call(foo)
// call 改变了this的指向,指向foo
// bar 函数执行了
var foo = {
value: 1,
bar : function() {
console.log(this.value)
}
}
foo.bar();
// 1.将函数设为对象的属性
// 2.执行该函数
// 3.删除该函数
Function.prototype.call2 = function(context) {
context.fn = this;
context.fn();
delete context.fn;
}
var foo = {
value: 1
}
function bar () {
console.log(this.value)
}
bar.call2(foo)
// call函数还能给定参数执行函数
var foo = {
value: 1
}
function bar(name,age) {
console.log(name)
console.log(age)
console.log(this.value)
}
bar.call(foo,'kevin',18);
arguments = {
0:foo,
1:'kevin',
2:18,
length: 3
}
var args = [];
for (var i=0;i<arguments.length;i++){
args.push('arguments['+i+']');
}