posts - 3,  comments - 2,  trackbacks - 0
  2007年11月2日
谁能告诉我为什么这个blog在FireFox里总是报错啊(js错误)
posted @ 2007-11-02 10:20 zozilla 阅读(246) | 评论 (2)编辑 收藏
construtor接受一个key word argument和 一个srcNode。
construtor的调用结束之后kwArgs的属性会被合并到新生成的对象中。如果kwArgs中有和prototype中同名的属性,后果是这样:

dojo.declare("some.Sample", [some.widget],
{
text: "",
constructor: function(kwArgs) {
this.text = kwArgs['text'].toUpperCase();
},
postCreate: function() {
console.info(this.text); // 你以为应该是大写对吧
}
});

new some.Sample( {text: "hello, world"} );

结果:
hello, world //其实还是小写, 因为kwArgs中的text被合并进当前对象的状态,已经是upper case的对象的text又被kwArgs中的小写覆盖了。

关于constructor的kwArgs是如何确定的:
在new XXX()的情况下,是在代码中确定的,像上面的例子。这是比较常见的情况。
如果对象是由标签方式生成的(就是使用dojo.parser),kwArgs是由parser根据prototype的属性读取标签的attribute生成的,如果标签上有不在prototype中的属性,这个属性不会被包含在kwArgs的属性中。

dojo.declare("some.Sample", [some.widget],
{
// text: "", 被去掉了
constructor: function(kwArgs) {
console.info(kwArgs['text']);
}
});

使用new XXX()的方式:
new some.Sample({text: "hello, world"});

结果:
hello, world

使用标签方式:
...
<div dojoType="some.Sample" text="hello, world" />;
...


结果:
undefined // 因为text不是prototype的一个属性
posted @ 2007-11-02 10:17 zozilla 阅读(586) | 评论 (0)编辑 收藏
仅列出标题