1. メソッドの定義
call メソッド:
構文: fun.call(thisArg[, arg1[, arg2[, ...]]])
定義:オブジェクトのメソッドを呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます。
注:
call メソッドを使用すると、別のオブジェクトの代わりにメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを元のコンテキストから thisArg で指定された新しいオブジェクトに変更します。
thisArg パラメーターが指定されていない場合は、Global オブジェクトが thisArg として使用されます。
apply メソッド:
構文: fun.apply(thisArg[, argsArray])
定義: オブジェクトのメソッドを適用し、現在のオブジェクトを別のオブジェクトに置き換えます。
注:
argArray が有効な配列でない場合、または引数オブジェクトではない場合、TypeError が発生します。
argArray も thisArg も指定されていない場合は、Global オブジェクトが thisArg として使用され、パラメータを渡すことはできません。
2. 2 つの違い
2 つのメソッドの基本的な違いは、パラメーターの受け渡し方法が異なることです
2.1. メソッドの呼び出し:
function Food(名前, 価格) {
Product.call(this, 名前, 価格);
this.category = 'food';
}
Food.prototype = new Product( );
function Toy(名前, 価格) {
Product.call(this, 名前, 価格);
this.category = 'おもちゃ';
}
Toy.prototype = new Product( );
var Cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);
関数 Food(名前, 価格) {
Product.apply(this, argument);
this.category = 'food';
}
Food.prototype = new Product();
function Toy(名前, 価格) {
Product.apply(this, argument);
this.category = 'toy';
}
Toy.prototype = new Product();
var Cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);
3.1. クラスの継承
function webDever(name,age,sex){
person.call(this,name,age);
this.sex=sex;
this.alertSex = function(){
アラート(this.sex);
}
}
var test= new webDever("Design Hive",24," Male");
test.alertName();//Design Hive
test.alertAge();//24
テスト.alertSex();//男性