Je peux obtenir le premier paramètre iAmDog et le premier paramètre est également accessible par this, comment passer le deuxième paramètre iAmCat et les imprimer?

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);
-3
Syed 7 août 2016 à 08:38

3 réponses

Meilleure réponse

Le tout premier paramètre dans function.call et function.apply est la thisArg qui est disponible en tant que valeur this dans la fonction. Donc, si vous voulez passer des arguments, vous devez commencer à partir du second. dans votre cas, vous pouvez envoyer null en tant que thisArg car cela n'est pas référencé dans la fonction.

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]);
0
Morteza Tourani 7 août 2016 à 06:02

Votre code est juste criblé de fautes de frappe. De plus, vous n'avez pas à appeler explicitement la fonction .call().

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);
2
Goodbye StackExchange 7 août 2016 à 05:42

Comme suggéré par FrankerZ, vous n'aurez peut-être pas besoin de call ou apply Mais si vous avez besoin de changer la variable de contexte, Vous pouvez utiliser call ou

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

Utilisez apply ou

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

Utilisez 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);
-1
Ayan 7 août 2016 à 05:48