Kat*_*ate 3 javascript dojo class
我正在学习将dojo用于我即将进行的项目,所以提前承认这可能是一个非常基本的问题.我试图找到答案,但没有成功.另外,我不得不使用稍微旧版本的dojo - 1.6我认为没有AMD.
我使用dojo.declare对一个类进行了delcared,这是一个稍微修改过的示例:
dojo.declare("myNamespace.CustomClass", null, {
firstProperty: "The default value",
constructor: function () { }
Test: function () {
alert(this.firstProperty);
}
});
Run Code Online (Sandbox Code Playgroud)
所以,本质上,一个名为CustomClass的类具有一个名为firstProperty的公共属性,其默认值为"默认值",一个当前不执行任何操作的构造函数和一个名为Test的公共方法,在调用时将以值为firstProperty.
我的假设是,当我创建一个CustomClass实例并调用Test()时,我会得到一个带有"默认值"的警告框.但是,我没有,我得到一个带有"未定义"的警报框.如果我在创建实例后设置firstProperty的值,然后调用Test,它就可以工作,我得到了属性设置的任何内容.因此,一种方法是在构造函数中设置默认值,但我读过的建议它应该按我假设的方式工作,所以我宁愿正确地做.
我也尝试在构造函数中调用dojo.safeMixin(this,null)作为我读过的东西让我怀疑这是否是必需的,但它并没有什么区别.
无论如何,提前感谢读取此内容!西蒙
您缺少的关键概念是范围的概念.当你这样做时alert(firstProperty);,你指的是一个局部变量firstProperty.在您的情况下,您没有使用该名称定义任何局部变量.但是,您已经定义了具有该名称的实例变量.与java等语言不同,必须使用显式访问实例变量this.
所以你的榜样应该是:
dojo.declare("myNamespace.CustomClass", null, {
firstProperty: "The default value",
constructor:function(params){
console.log(params);
dojo.safeMixin(this,params);
},
Test: function () {
alert(this.firstProperty);
}
Run Code Online (Sandbox Code Playgroud)
});
var myInstance = new myNamespace.CustomClass({firstProperty:'something else'});
myInstance.Test();
Run Code Online (Sandbox Code Playgroud)
您可能还想查看Javascript Scope Tricks,因为javascript中的范围可能会非常棘手.
编辑:我意识到你不是从dijit._Widget继承的.在这种情况下,您需要使用构造函数参数手动应用 dojo.safeMixin.我更新了上面的代码示例.我还创建了一个简单的jsfiddle来演示代码.
| 归档时间: |
|
| 查看次数: |
1312 次 |
| 最近记录: |