【问题标题】:When is it necessary to pass object as argument in a function in javascript?什么时候需要在 javascript 的函数中将对象作为参数传递?
【发布时间】:2016-04-18 22:48:47
【问题描述】:

如果我不想将'this'用作对象并直接编写函数而不将'this'作为对象传递并直接在函数中编写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"/>

【问题讨论】:

  • 向我们展示您是如何调用这些函数的。
  • this 关键字只是在不同的范围内意味着不同的东西。这就是它不起作用的原因。
  • 嘿,我正在使用 onmouseover 事件处理程序调用这些函数
  • 那么,是不是我们不能在函数中直接使用'this'??
  • 好吧,你可以使用它,但它与事件处理程序中的this 不一样。查看MDN docs on the this keyword

标签: javascript function object


【解决方案1】:

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

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"/>

【讨论】:

  • 非常感谢! .call 真的很有帮助
【解决方案2】:

img 标签内,this 指的是特定的img 元素。在这里,在函数内部,this 将是 window。一般来说,函数内部的this指的是函数所属的对象。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2012-05-30
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多