Javascript传递对象作为函数参数

时间:2012-05-23 16:02:11

标签: javascript function object parameter-passing

我对javascript很新,所以也许这是一个愚蠢的错误。 我创建了一个像下面这样的对象:

function objA(){
    this.prop1;
    this.prop2;
    this.prop3;
    this.func1=function(){
        alert('func1');
    }
    this.func2=function(){
        alert('func2');
    }
}

我现在有一个我想要传递对象的函数:

var foo=new objA;

function test(foo){....}

问题是当我调用test()时,我得到了objA(objA.func1和objA.func2)中的函数。 我想获得objA的属性值。 我必须使用另一个函数和一个数组,用objA的属性填充数组,然后传递数组:

var arrayA={}

function fillArray(data){
    arrayA.prop1=data.prop1;
    arrayA.prop2=data.prop2;
    arrayA.prop3=data.prop3;
}

function test(arrayA){....}

这是唯一的方式还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

函数对象的属性(它们是一等值),因此它们像{1}}循环一样显示在任何其他属性中。您可以通过以下方式避免进一步检查:

for (var propName in myObj)

或者,在现代浏览器中,您可以创建特定属性(如您的函数)不可枚举,因此它们不会显示在for (var prop in myObj){ if (!myObj.hasOwnProperty(prop)) continue; // Skip inherited properties var val = myObj[prop]; if (typeof val === 'function')) continue; // Skip functions // Must be my own, non-function property } 循环中:

for ... in

有关详情,请参阅Object.definePropertyObject.defineProperties的文档。

最后,如果您不需要将函数定义为closures,则可以在对象的原型上定义它们,在这种情况下,hasOwnProperty测试将导致它们被跳过:

function objA(){
  this.prop1 = 42;
  Object.defineProperty(this,'func1',{
    value:function(){
     ...
    }
  });
}