将自定义javascript对象属性作为参数传递给函数进行更新

时间:2012-01-25 21:28:31

标签: javascript

是否可以将javascript对象的属性传递给函数以更新属性的值?现在我有一个像......的对象。

element = { 
   border: { 
     width:0
   }
}

我正在尝试将此对象的实例传递给函数以更新width属性,但它无法正常工作。有点像...

var instance = new element();
UpdateWidth(instance.border.width, 50);

我在函数内部猜测它只是获取instance.border.width的值而不是属性本身。这可能吗?感谢。

3 个答案:

答案 0 :(得分:0)

我会将函数附加到对象上,如下所示:

function element() { 
       this.border: { 
         width:0
       },
       this.updateBorderWidth: function (newWidth) {
           this.border.width = newWidth;
       }

    }

然后这样做:

var instance = new element();
instance.updateBorderWidth(50);

我不确定为什么如果你可以直接访问实例属性,除非你想要在更新宽度时发生其他事情,这是必要的。另外请注意,如果您希望在Javascript中创建类和继承,我会看一下:

http://ejohn.org/blog/simple-javascript-inheritance/

答案 1 :(得分:0)

您无法通过引用传递原始值(例如,数字文字,0)。另一方面,对象可以是 - 例如存储在border属性中的对象:

UpdateWidth(instance.border, 50);

当然,这需要UpdateWidth这样:

function UpdateWidth(subject, width) {
    subject.width = width;
}

但是,如果函数就是这么简单,你可以直接设置width属性而不需要引用传递:

instance.border.width = 50;

但是,您无法直接从现有对象创建新实例:

var element = { };
var instance = new element(); // TypeError: object is not a function

您可以在现代浏览器中使用Object.create(或使用polyfill):

var instance = Object.create(element);

否则,您需要将其声明为构造函数:

function Element() {
    this.border = {
        width: 0
    };
}

var instance = new Element();

答案 2 :(得分:0)

你想要的是不可能的。直接访问是最简单的通过赋值运算符。

在你的情况下:obj.obj.prop = value;

下面是一些示例,我使用一个函数来创建Object,以更明确地显示正在发生的事情与使用JSON表示法。有关无法以您尝试的方式从现有对象实例化对象的更多信息,请参阅Jonathan的答案。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Test</title>
    <script language="javascript"type="text/javascript">

    function init() {

        function e() {
            var obj = new Object();
            obj.border = new Object();
            obj.border.width = 0;
            return obj;         
        }

        var x = e();

        var y = e();

        y.border.width = 12;
        document.write(y.border.width);
        document.write("<br/>");
        document.write(x.border.width);

        function UpdateWidth( obj, a ) {
            obj.border.width = a;
        }

        UpdateWidth( y, 50 );
        document.write("<br/>");
        document.write(y.border.width);

    }



    window.onload = init;

    </script>

</head>

<body>

</body>
</html>