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.1. 呼び出しメソッド:
function Product(name, price) { this.name = name; this.price = price; if (price < 0) throw RangeError('Cannot create product "' + name + '" with a negative price'); return this; } function Food(name, price) { Product.call(this, name, price); this.category = 'food'; } Food.prototype = new Product(); function Toy(name, price) { Product.call(this, name, price); this.category = 'toy'; } Toy.prototype = new Product(); var cheese = new Food('feta', 5); var fun = new Toy('robot', 40);
function Product(name, price) { this.name = name; this.price = price; if (price < 0) throw RangeError('Cannot create product "' + name + '" with a negative price'); return this; } function Food(name, price) { Product.apply(this, arguments); this.category = 'food'; } Food.prototype = new Product(); function Toy(name, price) { Product.apply(this, arguments); this.category = 'toy'; } Toy.prototype = new Product(); var cheese = new Food('feta', 5); var fun = new Toy('robot', 40);
function Person(name,age){ this.name = name; this.age=age; this.alertName = function(){ alert(this.name); } this.alertAge = function(){ alert(this.age); } } function webDever(name,age,sex){ Person.call(this,name,age); this.sex=sex; this.alertSex = function(){ alert(this.sex); } } var test= new webDever(“设计蜂巢”,24,”男”); test.alertName();//设计蜂巢 test.alertAge();//24 test.alertSex();//男