什么时候需要在javascript中的函数中传递对象作为参数?

时间:2016-04-18 22:48:48

标签: javascript function object

如果我不想使用'这个'作为一个对象并直接写入函数而不传递'这个'作为一个对象并直接写出this.src =""在函数中为什么不起作用?

<body>
<script type="text/javascript">
  function picture(yolo){
    yolo.src="3Nail.jpg";
  }

  function normal(yolo) {
    yolo.src="4Nail.jpg";
  }
</script>

 <img onmouseover="picture(this)" onmouseout="normal(this)" src="1nail.jpg" alt="n1"/>
<img onmouseover="picture(this)" onmouseout="normal(this)" src="2nail.jpg" alt="n2"/>

2 个答案:

答案 0 :(得分:2)

由于函数与事件处理程序无关,因此它们的this引用了全局窗口对象。为了避免必须使用变量yolo作为参数,您可以通过使用call将其作为上下文调用它们来为函数提供此绑定,如下所示。

JS

  function picture(){
    this.src="3Nail.jpg";
  }

  function normal() {
    this.src="4Nail.jpg";
  }

HTML

<img onmouseover="picture.call(this)" onmouseout="normal.call(this)" src="1nail.jpg" alt="n1"/>
<img onmouseover="picture.call(this)" onmouseout="normal.call(this)" src="2nail.jpg" alt="n2"/>

答案 1 :(得分:1)

img标记内,this指的是特定的img元素。在函数内部,this将为window。通常,函数内的this是指函数所属的对象。

因此,如果您在不从img标记传递该元素的情况下调用该函数,该函数将无法知道它应该更新哪个元素。当然,您可以在函数内部使用查询选择器来获取所需内容 - 但这只有在您始终想要更新相同元素时才有效。