Javascriptのcallとapplyの違いと使い方_基礎知識

WBOY
リリース: 2016-05-16 17:15:20
オリジナル
787 人が閲覧しました

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 Product(name,price) {
this.name = name;
this.price = 価格;
if (価格 < 0)
throw RangeError('マイナスの価格では製品 "' name '" を作成できません');
return this;
}

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);


2.2. 適用メソッド:
コードをコピーします コードは次のとおりです:

function Product(name, Price) {
this. name = name ;
this.price = 価格;
if (price < 0)
throw RangeError('マイナスの価格では製品 "' name '" を作成できません');
return this ;
}

関数 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. アクションの例

3.1. クラスの継承

コードをコピーします コードは次のとおりです:

関数(名前 ,年齢){
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(){
アラート(this.sex);
}
}

var test= new webDever("Design Hive",24," Male");
test.alertName();//Design Hive
test.alertAge();//24
テスト.alertSex();//男性


3.2、コールバック関数
コードをコピー コードは次のとおりです次のように:

function Album(id, title, owner_id) {
this.id = id;
this.name = title;
this.owner_id = owner_id;
} ;
Album.prototype.get_owner = function (コールバック) {
var self = this;
$.get('/owners/' this.owner_id, function (data) {
コールバック && コールバック .call(self, data.name);
});
};
var album = new Album(1, 'Design Hive', 2);
album.get_owner( function (owner ) {
alert('アルバム「this.name」は ' owner に属します);
});
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート