callとapplyの役割と違い
2225 ワード
まず、callとapplyは関数のthisの指向問題を修正するために使用されます.
次に、それらの異なるパラメータの方法です.前の文で彼らの役割を言うときに2つのキーワード「関数」と「this」があることに注意してください.thisの指向を修正するには、必ず1つのthis修正後の指向があります.関数は必然的にパラメータの問題に関係します.callメソッドはこの関数に伝達するパラメータをそれぞれ自分の複数のパラメータとして使用することができます.applyメソッドは、関数に渡されるパラメータを独自のパラメータとして配列に結合する必要があります.
eg:
callとapplyでthisの指向を表す場合、パラメータは表示されません.デフォルトでは、thisの指向をwindowsに変更します.
パラメータがある場合、thisは最初のパラメータを指します.
パラメータを渡す必要がある場合、callは複数のパラメータを直接書くことができ、applyは配列で渡す必要があります.
次に、コンストラクション関数の例を示します.
次に、それらの異なるパラメータの方法です.前の文で彼らの役割を言うときに2つのキーワード「関数」と「this」があることに注意してください.thisの指向を修正するには、必ず1つのthis修正後の指向があります.関数は必然的にパラメータの問題に関係します.callメソッドはこの関数に伝達するパラメータをそれぞれ自分の複数のパラメータとして使用することができます.applyメソッドは、関数に渡されるパラメータを独自のパラメータとして配列に結合する必要があります.
eg:
var name = 'Evan';
var age = 20;
var person = {
name: 'Hillary',
age: 19,
sayIntroduce: function () {
return "Hello, My name is " + this.name + " and I'm " + this.age + ' years old.'
},
sayHobby: function (val1, val2) {
return "I'm " + this.name + ", I like " + val1 + " and " + val2 + ".";
}
}
var person1 = {
name: 'Coy'
}
console.log(person.sayIntroduce()); // Hello, My name is Hillary and I'm 19 years old.
callとapplyでthisの指向を表す場合、パラメータは表示されません.デフォルトでは、thisの指向をwindowsに変更します.
// , this window
console.log(person.sayIntroduce.call()); // Hello, My name is Evan and I'm 20 years old.
console.log(person.sayIntroduce.apply()); // Hello, My name is Evan and I'm 20 years old.
パラメータがある場合、thisは最初のパラメータを指します.
// this person1, person1 age , undefined
console.log(person.sayIntroduce.call(person1)); // Hello, My name is Coy and I'm undefined years old.
console.log(person.sayIntroduce.apply(person1)); // Hello, My name is Coy and I'm undefined years old.
パラメータを渡す必要がある場合、callは複数のパラメータを直接書くことができ、applyは配列で渡す必要があります.
console.log(person.sayHobby.call(person1, 'swimming', 'hiking')); // I'm Coy, I like swimming and hiking.
console.log(person.sayHobby.apply(person1, ['swimming', 'hiking'])); // I'm Coy, I like swimming and hiking.
次に、コンストラクション関数の例を示します.
//
function Grade(max, min, average) {
this.max = max;
this.min = min;
this.average = average;
}
function Subject(subjectName,max, min, average) {
Grade.call(this, max, min, average);
this.subjectName = subjectName;
}
var math = new Subject('math', 99, 60, 80);
console.log(math);