【问题标题】:Casting Object as Hash in Prototype在原型中将对象转换为哈希
【发布时间】:2011-03-23 20:53:02
【问题描述】:

我在这里不知所措。我创建了这个类,它接受对象形式的参数:

new Widget('id_of_element', { option1: 'foo', option2: 'bar' });

但是,第二个参数不被视为散列,而是作为对象,因此如果未设置,我无法应用默认设置:

initialize: function (element, options) {
    this.options = $H({ option1: 'something', option2: 'else', option3: 'hello', option4: 100 }).update(options);
}

我需要将参数“options”中的值转换为哈希,这样我就可以使用 update() 函数。我在 Prototype 框架中找不到将对象转换为 Hash 的任何内容。

奇怪的是,在 this.options.inspect() 上,所有正确的值都显示出来了,但是当我调用它时:

alert(this.options.option1);
// or 
alert(this.options['option1']);

...它们以未定义的形式返回。为什么 Hash#inspect 方法会找到这些值,但仍然未定义?我是否缺少对某种类型的实质性理解?

【问题讨论】:

    标签: javascript object hash prototypejs


    【解决方案1】:

    在 JavaScript 中不存在强制转换。如果您想要Hash,那么您将需要创建一个,您已经在这样做了。

    从 Prototype 文档看来,您需要使用 Hash 的方法获取值:

    alert(this.options.get("option1"));
    

    【讨论】:

    • 我能不能施放是无关紧要的。我应该能够调用这些值。如果 Hash#inspect 可以看到它们应有的样子,为什么我不能提取值以供使用?
    • 谢谢。我知道 Hash#get 方法,但我真的希望可以更简单地访问变量 - 就像一些返回 x/y 和左/顶数据对的 Element 方法,可以通过这种方式访问​​
    猜你喜欢
    • 2015-01-04
    • 2011-01-17
    • 2020-09-15
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多