2016-08-07 10 views
-3

私は拳のパラメータiAmDogを得ることができます。また、最初のパラメータはthisによってアクセスされ、2番目のパラメータiAmCatを渡してどのように出力するのですか?パラメータとして関数に2つ/複数のオブジェクトを渡す方法

var speak = function(iAmDog, iAmCat) { 
 
    console.log(this); 
 

 
    console.log(iAmDog.love); 
 
    console.log(iAmDog.normal); 
 

 
    console.log(iAmCat.love); 
 
    console.log(iAmCat.normal); 
 
}; 
 

 
var speakAsDog = { 
 
    normal: "moof", 
 
    love: 'woow' 
 
}; 
 
var speakAsCat = { 
 
    normal: "meow", 
 
    love: 'purr' 
 
}; 
 

 
speak.call(speakAsDog, speakAsCat);

答えて

-1

function.callfunction.applyで非常に最初のパラメータは、関数内部this値として入手可能であるthisArgあります。したがって、引数を渡す場合は、2番目から開始する必要があります。ヌルをthisArgとして送信することができます。これは、関数内で参照されないためです。

var speak = function(iAmDog, iAmCat) { 
 
    console.log(iAmDog.love); 
 
    console.log(iAmDog.normal); 
 

 
    console.log(iAmCat.love); 
 
    console.log(iAmCat.normal); 
 
}; 
 

 
var speakAsDog = { normal: "moof", love: 'woow' }; 
 
var speakAsCat = { normal: "meow", love: 'purr' }; 
 

 
speak.call(null, speakAsDog, speakAsCat); 
 
speak.apply(null, [speakAsDog, speakAsCat]);

2

あなたのコードでは、タイプミスとちょうどだらけです。また、明示的に.call()関数を呼び出す必要はありません。 FrankerZによって示唆されるように

var speak = function (iAmDog, iAmCat) { 
 
    console.log(iAmDog.love); 
 
    console.log(iAmDog.normal); 
 

 
    console.log(iAmCat.love); 
 
    console.log(iAmCat.normal); 
 
}; 
 

 
var speakAsDog = { normal: "moof", love: 'woow' }; 
 
var speakAsCat = { normal: "meow", love: 'purr' }; 
 

 
speak(speakAsDog, speakAsCat);

+0

ねえ、彼はすでに参照さ問題の@FrankerZは、最初のパラメータもthis' 'によってアクセスされます。このソリューションがコンテキストを変更する際にどのように役立つのでしょうか?ここで 'this'は外側スコープを指します。私がここで何か不足している場合は私に教えてください。 – Ayan

+0

彼はパラメータにアクセスしたいだけです。 「これ」の必要は全くありません。 – FrankerZ

+0

質問の彼の最初の行を確認してください。 >拳パラメータiAmDogを取得することができ、最初のパラメータもこれによってアクセスされます 彼はこれを使用してアクセスする必要がありました。 – Ayan

-1

を使用でき 、変更されますがcallapplyを必要としないかもしれません。しかし、あなたはコンテキスト変数を必要とする場合にはcallまたは

var speak = function(iAmCat) { 
 
    var iAmDog = this; 
 
    console.log(iAmDog.love); 
 
    console.log(iAmDog.normal); 
 

 
    console.log(iAmCat.love); 
 
    console.log(iAmCat.normal); 
 
}; 
 

 
var speakAsDog = { 
 
    normal: "moof", 
 
    love: 'woow' 
 
}; 
 
var speakAsCat = { 
 
    normal: "meow", 
 
    love: 'purr' 
 
}; 
 

 
speak.call(speakAsDog, speakAsCat);

使用apply又は

var speak = function() { 
 
    var iAmDog = this, 
 
    iAmCat = arguments[0]; 
 
    console.log(iAmDog.love); 
 
    console.log(iAmDog.normal); 
 

 
    console.log(iAmCat.love); 
 
    console.log(iAmCat.normal); 
 
}; 
 

 
var speakAsDog = { 
 
    normal: "moof", 
 
    love: 'woow' 
 
}; 
 
var speakAsCat = { 
 
    normal: "meow", 
 
    love: 'purr' 
 
}; 
 

 
speak.apply(speakAsDog, [speakAsCat]);

使用bind

var speak = function(iAmCat) { 
 
    var iAmDog = this; 
 
    console.log(iAmDog.love); 
 
    console.log(iAmDog.normal); 
 

 
    console.log(iAmCat.love); 
 
    console.log(iAmCat.normal); 
 
}; 
 

 
var speakAsDog = { 
 
    normal: "moof", 
 
    love: 'woow' 
 
}; 
 
var speakAsCat = { 
 
    normal: "meow", 
 
    love: 'purr' 
 
}; 
 
var newFN = speak.bind(speakAsDog); 
 
newFN(speakAsCat);

+0

Hey @Syedは 'this'を別のコンテキストで使いたいので、結果を得るためにavobeに表示される' call'、 'apply'、' bind'を使うことができます。 – Ayan

関連する問題