将参数传递给javascript中的函数

时间:2014-10-28 17:06:39

标签: javascript

我试图用选项3和4改变myprop的值,但没有成功。为什么呢?

object1 = {myprop:"value1", ....};  

button1.addEventListener('click',  function(e){
 object1.myMethod("value2"); // 1) working.   myMethod is a method that sets myprop's value  
 object1.myprop="value2";    // 2) working 

 myFunction1(object1.myMethod);   // 3) not working
 myFunction2(object1.myprop);     // 4) not working
});

function myFunction1(src) {
 src("value2");
}
function myFunction2(src) {
 src="value2";
}

2 个答案:

答案 0 :(得分:2)

您正在传递object1.myMethod / object.myprop已复制src变量。

然后,您可以调用该函数(但在不同的上下文中,因此其中this的值不同)或覆盖src的值,同时保留原始属性。

如果您希望在正确的上下文中调用该函数,则需要使用call()apply()传递该上下文。

如果要覆盖myprop中存储的对象的object1属性,则必须引用object1的值并在其上设置属性。

答案 1 :(得分:0)

当您定义匿名函数来处理click事件(button1.addEventListener('click', function(e) {...})时,会在闭包中捕获object1.myMethodobject1.myprop的值。

它的意思是:你正在定义一个函数,这个函数在执行时需要一些在定义时在范围内的值,而不是它何时执行(object1.myMethod和{ {1}})。函数正在代码中定义,但是作为参数传递,只要按钮上发生object1.myprop事件,就会远离那里调用。

会发生clickobject1.myMethod被评估为其值并在函数关闭时捕获的内容,以便稍后在执行该函数时可用(您不需要&#39 ;看到任何这种情况发生,只是发生了。)

所以,你的方法在这里不起作用。我看到了一个用于设置属性的替代方法,即传递要更改值的对象,并传递要更改的属性的名称。

object1.myprop

对于方法部分,我可以看到3种方法使其工作(实际上是4,如果我使用// 1 way to make the property call work object1 = {myProp:"value1"}; button1.addEventListener('click', function(e){ myFunction2(object1, 'myProp'); }); function myFunction2(src, prop) { src[prop]="value3"; }; 而不是apply)。

  1. 首先与属性的情况相同:您传递call以及插槽的名称,即函数。

  2. 其次,您可以在object1的上下文中传递object1和函数以及稍后的call函数。

  3. 第三,您可以从object1创建一个绑定到object1.myMethod的新功能(即object1将是其上下文),无论如何你稍后会在哪里打电话。这是通过object1完成的。

  4. 示例:

    bind
相关问题