Javascript callとappyの違いと使い方

3108 ワード

一、方法の定義コール方法:文法:fun.call(thisArg[,arg 2])定義:オブジェクトを呼び出す方法は、別のオブジェクトで現在のオブジェクトを置換します.説明:コール方法は、他のオブジェクトの代わりに一つの方法を呼び出すために使用されてもよい.call方法は、関数のオブジェクトコンテキストを初期のコンテキストから、thisArgによって指定された新しいオブジェクトに変更することができる.thisArgパラメータが提供されていない場合、GlobalオブジェクトはthisArgとして使用される.
applyメソッド:文法:fun.apply定義:あるオブジェクトを適用する方法で、現在のオブジェクトを別のオブジェクトに置き換えます.説明:もしargArayが有効な配列ではないか、またはargmentsオブジェクトではないなら、TypeErrorを引き起こすことになります.argArayおよびthisArgのいずれかのパラメータが提供されていない場合、GlobalオブジェクトはthisArgとして使用され、どのパラメータも伝達されません.
二、両者を区別する二つの方法の基本的な違いは、パスの違い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);

2.2、アプリ方法:
 
  
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);

三、作用例
3.1、クラスの継承
 
  
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();//

3.2、コールバック関数
 
  
function Album(id, title, owner_id) {
this.id = id;
this.name = title;
this.owner_id = owner_id;
};
Album.prototype.get_owner = function (callback) {
var self = this;
$.get(‘/owners/' + this.owner_id, function (data) {
callback && callback.call(self, data.name);
});
};
var album = new Album(1, ‘ ', 2);
album.get_owner(function (owner) {
alert(‘The album' + this.name + ‘ belongs to ‘ + owner);
});