我有一个名为Test
define([
"dojo/_base/declare"
], function (declare) {
var ctrl = declare(null, {
fields : "field1,field2",
constructor: function () {
},
checkFields : function(){
}
});
ctrl.testStatic = function () {
console.log(fields);// null
console.log(this.fields);// null
}
return ctrl;
});
require(["my/Test"], function(Test){
Test.testStatic();
});
是否可以在我的类Test中访问我的字段属性?
解决此问题的最佳方法是什么?
感谢您的帮助。
答案 0 :(得分:2)
第一件事:
是在声明块之外声明函数的原因:
ctrl.testStatic = function () {
console.log(fields);
console.log(this.fields);
}
如果你在声明中宣布它会很好地运作
第二件事:
当需要你的Test类时,想想最后实例化它,然后访问它的方法如下:
require(["my/Test"], function(Test){
var test = new Test()
test.testStatic();
});
请参阅下面的代码段(无法在此处的单独文件中重新创建!!):
require([
"dojo/_base/declare"
], function(declare) {
// updated as Gibbok correction (capitalize)
var Ctrl = declare(null, {
fields : "field1,field2",
constructor: function () {
},
checkFields : function(){
},
testStatic : function() {
console.log(this.fields);// null
}
});
var ctrl1 = new Ctrl();
ctrl1.testStatic();
});
<script>
window.dojoConfig = {
parseOnLoad: false,
async: true
};
</script>
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.12.1/dojo/dojo.js"></script>
否则,如果要将类用作静态对象,则(不使用new关键字进行访问)。 使用dojo declare classy是没用的,所以声明应该是:
define([], function () {
var ctrl = {
fields : "field1,field2",
constructor: function () {
},
checkFields : function(){
},
testStatic : function() {
//console.log( fields ) this will fail fields is not defined reference error
console.log(this.fields);
}
};
return ctrl;
});
然后是
的预期输出require(["my/Test"], function(Test){
Test.testStatic();
});
将是:
FIELD1,FIELD2
答案 1 :(得分:1)
如果您希望将属性void FixedUpdate() {
// IF KEY IS DOWN, MOVE //
if (isForward == true) {
var vect = Vector3.Cross(pushForward, Vector3.down);
float turn = Input.GetAxis("Vertical");
rb.AddTorque(vect * torque * turn);
Debug.Log("Moving Forward");
}
}
保持为静态@bRIMO,则答案是有效的。
如果您希望将属性fields
设置为非静态,则意味着您要为fields
的每个实例添加属性fields
,您应该填充直接在Ctrl
中的fields
属性。否则constructor
中的更改将反映在fields
的所有实例中,仅当属性不是基本类型时才有效。
除了@bRIMO的好答案之外,我还要加上:
Ctrl
使用大写字母对类名使用dojo约定。使用非静态成员修改了代码段:
Ctrl
&#13;
require([
"dojo/_base/declare"
], function(declare) {
var Ctrl = declare(null, {
constructor: function () {
// NOTES! property is declared in the constructor
this.fields = "field1,field2";
},
checkFields : function(){
},
testStatic : function() {
console.log(this.fields);
}
});
var ctrl1 = new Ctrl();
ctrl1.testStatic(); // field1,field2
var ctrl2 = new Ctrl();
ctrl2.fields = 'xyz';
ctrl2.testStatic(); // xyz
ctrl1.testStatic(); // field1,field2
});
&#13;