将自定义javascript对象属性作为要更新的函数中的参数传递

将自定义javascript对象属性作为要更新的函数中的参数传递,javascript,Javascript,是否可以将javascript对象的属性传递给函数以更新该属性的值?现在我有一个物体像 element = { border: { width:0 } } 我试图将这个对象的一个实例传递给一个函数来更新width属性,但它不起作用。类似于 var instance = new element(); UpdateWidth(instance.border.width, 50); 我猜在函数内部,它只是获取instance.border.width的值,而不是属性本身。

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

element = { 
   border: { 
     width:0
   }
}
我试图将这个对象的一个实例传递给一个函数来更新width属性,但它不起作用。类似于

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

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

我会像这样将函数附加到对象上:

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

    }
然后这样做:

var instance = new element();
instance.updateBorderWidth(50);
但是,如果您可以直接访问实例属性,我不确定为什么需要这样做,除非您希望在更新宽度时发生其他事情。另外,如果您希望在Javascript中创建类和继承,我将介绍以下内容:


不能通过引用传递基本值,例如数字文字、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
您可以在现代浏览器中使用,也可以与polyfill一起使用:

var instance = Object.create(element);
否则,您需要将其声明为构造函数:

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

var instance = new Element();

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

在您的例子中:obj.obj.prop=value

下面是一些示例,我使用一个函数来创建对象,以更明确地显示与使用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>

我遇到的问题是,我给出的示例代码非常简单。我的对象目前实际上有20个属性,还有更多属性。所有这些都需要通过网页上的选择进行更新。例如,我在页面上有五个滑块,它们将控制边框宽度all、top、right、btm和left。我在jquery document ready事件中连接了滑块,以便在移动右边框滑块时更新对象的border right属性。因此,所有这些属性都在一个数组中,这些数组被传递给jquery,每个函数都连接到滑块。在我的jquery中,每个循环都调用函数并传入值,但当它进入函数内部时,值现在是未定义的。我使用firebug来监视调用,所以我不确定为什么它会作为未定义的函数出现。有什么想法吗?谢谢。更新thinstance.border,50不是更有意义吗?