2015-04-07 6 views
0

Я смущен в использовании метода apply или call правильно. Я знаю, что apply передаёт массив функции, а вызов передает строки функции. Например, код ниже, что «действительно» имеет отношение к коду? если это не имеет никакого отношения к этому коду, может ли кто-нибудь дать мне пример, когда «это» реализуется надлежащим образом?Метод Apply/Call в Javascript: Каковы первые аргументы «это»?

function myFunction(a, b) { 
    return a * b; 
} 
myArray = [10,2]; 
myFunction.apply(this, myArray); 
+2

Это то, что 'this' будет ссылаться на * внутри * функции. – zerkms

+0

Возможно, вы захотите сослаться на это: http://stackoverflow.com/questions/1986896/what-is-the-difference-between-call-and-apply –

+0

'call' не передает строки функции, это передает индивидуальные аргументы или любой другой тип. В любом случае аргумент 'this' делает то, что говорит документация. Прочтите. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply. Если вызываемая вами функция не использует 'this', вы можете передать 0, или null, или undefined, или« 123 », или что-нибудь еще, что вы хотите. –

ответ

0

Это контекст для функции. Если у вас есть это. Что-то внутри функции, он получит доступ к этому конкретному свойству из этого объекта контекста.

 
 

 
    function foo(bar) { 
 
     this.bar = bar; 
 
    } 
 
    
 
    foo.apply(this, ['Hello']); //calling foo using window as context (this = window in global context in browser) 
 
    console.log(this.bar);   //as you can see window.bar is the same as this.bar 
 
    console.log(window.bar); 
 
    
 
    var ctx = {}; //create a new context 
 
    
 
    foo.apply(ctx, ['Good night']); 
 
    console.log(ctx.bar);  //ctx now has bar property that is injected from foo function
Open up your dev console to see result.

См: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

+0

Большое спасибо! это отличный пример! – Someone

0

this является областью функции Apply/Call. Примером может служить:

function test() { 
    alert(this.a); 
} 

(function() { 
    this.a = "test"; 
    test();//test 

    var self = this; 

    (function() { 
     this.a = "Foo"; 
     test();//Foo 
     test.apply(self, []);//test 
    }()); 

}()); 
0

Первый аргумент будет в вашей функции this.

т.е.

var p = {"name":"someone"}; 
function myFunction(a, b) { 
    console.log(this); 
    return a*b; 
} 
var myArray = [10,2]; 
myFunction.apply(p, myArray); //log output shows {"name":"someone"} 

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

  • Нет связанных вопросов^_^