在Javascript中访问属性

时间:2011-03-14 15:17:48

标签: javascript qooxdoo

在使用qooxdoo框架时,在一个类中: (在.xml文件中,activeRow被定义为object_iterate:)

        <object_literal name="activeRow" scope="static" constructor="false" deprecated="false" private="false" protected="false" ignored="true" internal="false" type="Object">
            <property name="nullable" scope="static" constructor="false" deprecated="false" private="false" protected="false" ignored="true" internal="false" type="Boolean">
            </property>
            <property name="check" scope="static" constructor="false" deprecated="false" private="false" protected="false" ignored="true" internal="false" type="String">
            </property>
        </object_literal>

这项工作:

properties: {
        activeRow: {            
            nullable: true,
            check: "Object"
        },
...

this.setActiveRow(123);
var x = this.getActiveRow();

这不起作用:

properties: {
        activeRow: {            
            nullable: true,
            check: "Object",
        init: {test1: null, test2: null}
        },
...

this.setActiveRow({test1: 123, test2: 123 });
var y = this.getActiveRow().test1;

有谁知道语法的哪一部分是错的?

提前谢谢!

包含以下讨论的补充:

alert(typeof this.getActiveRow);返回:功能

警报(this.getActiveRow);

返回:

function(){
return qx.core.Property.executeOptimizedGetter(this, bI, name, "get");
}

2 个答案:

答案 0 :(得分:1)

看看这个更完整的Playground example(您还可以在其中试验代码)。这是代码本身:

qx.Class.define("Foo", {
    extend: qx.core.Object,
    properties: {
      activeRow: {
        nullable : true,
        check: "Object"
      },
      activeRowInit: {
        nullable : true,
        check: "Object",
        init: {test1: null, test2: null}
      }
    },
    members : {
      setAndGet : function () {
        this.setActiveRow({a:1,b:2});
        /*this.setActiveRow(123);*/
        var x = this.getActiveRow();
        return x;
      },
      setAndGetMember : function () {
        this.setActiveRowInit({test1: 123, test2: 123 });
        var y = this.getActiveRowInit().test1;
        return y;
      }
    }
});
var f = new Foo();
alert(f.setAndGet());
alert(f.setAndGetMember());

它捕获你的代码片段,带有一个属性,一个没有'init',并获取整个属性,或者只是属性对象的成员。对我来说,一切都按预期工作。如果在“setAndGet”方法中使用this.setActiveRow(123),则会收到一条合理的错误消息,上面写着“类型对象的预期值但得到123”(在日志窗格中)。

答案 1 :(得分:0)

如果第一个样本有效,则意味着setActiveRow方法期望一个整数作为其参数,因此可能传递关联数组{test1: 123, test2: 123 }会破坏它。

所以在第一个样本中有这样的代码:

this.setActiveRow(123);

然后第二行应该正常工作,假设test1是类的属性。