分享

Quick Tip: Calling JavaScript Methods on Other Objects

 燮羽 2010-11-27

Using Call and Apply

Here’s the scenario: we have two objects:

  1. var joe = {  
  2.     name : "Joe",  
  3.     greet : function (name) {  
  4.         alert(this.name + " says hello to " + name);  
  5.     }  
  6. };  
  7.   
  8. var jill = {  
  9.     name : "Jill"  
  10. };  

It’s pretty simple to get Joe to greet Jill:

  1. joe.greet("Jill");  

But how can we get Jill to greet Joe? She doesn’t have a greet method (and let’s assume we can’t / won’t / shouldn’t give her one). Well, because everything in JavaScript—including functions—is an object, everything can have a method, or a function that can be called from it. Functions are given two methods that allow you to call them in different contexts.

The context of a method is basically the object that will be this when the function is called. In our greetmethod, this refers to the object joe, because that’s what it is a part of.

Now, try this:

  1. joe.greet.call(jill, "Joe");  

The call method on JavaScript functions allows you to change the function’s context. The first parameter we pass in will be the new context: in this case, that’s jill. Subsequent parameters are the parameters to the function you’re calling. In this case, “Joe” will be passed to greet. If you run this, you’ll get an alert box with the message “Jill says hi to Joe.”

There’s also an apply method; the only difference is that it takes the parameters of the method as an array, rather than as raw parameters, a la the call method.

  1. joe.greet.call(jill, ["Joe"]);  

If you have a hard time remembering whether it’s call or apply that takes the array, remember that applyand array both start with ”a.”

Thanks for reading!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多