2016-08-07 2 views
-3

Я могу получить первый параметр iAmDog, а к первому параметру также доступен this, как передать второй параметр iAmCat и распечатать их?Как передать объект 2/mulitple функции как параметр

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.call и function.apply является thisArg, который доступен как this значения внутри функции. Поэтому, если вы хотите передать какие-либо аргументы, вы должны начать со второго. в вашем случае вы можете отправить null как 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().

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 в вопросе он уже refered, первый параметр также доступен на 'this'. Как это решение может помочь в изменении контекста? Здесь 'this' будет указывать на внешний масштаб. Дайте мне знать, если я здесь пропажу. – Ayan

+0

Он просто хочет получить доступ к параметру. Нет необходимости в этом. – FrankerZ

+0

Пожалуйста, проверьте его первую строку вопроса. > Мне удалось получить первый параметр iAmDog, и первым параметром также был доступ к этому , он имел требование получить к нему доступ, используя это. – Ayan

-1

Как было предложено FrankerZ вам может не понадобиться call или apply Но в случае, если вам нужна переменная контекста меняется, Вы можете использовать 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

Эй @Syed, как вы хотели использовать 'this' в другом контексте, вы можете использовать' call', 'apply' или' bind' показанный avobe для получения результата. – Ayan

Смежные вопросы