DOJO 声明中可选的 className 参数有什么用?
What is the use of optional className parameter in DOJO declare?
在DOJO中declare(className,superclass,props)
中的className
有什么用
在下面的示例中,我尝试在使用 in-heritage 时使用 className。
通过时 className
我收到一个错误。
declare(className,superclass,props);
className Optional
The optional name of the constructor (loosely, a "class") stored in the "declaredClass" property in the created prototype. It will be used as a global name for a created constructor.
require(["dojo/_base/declare"], function(declare) {
var Mammal = declare('Mammal',null, {
constructor: function(name) {
this.name = name;
},
sayName: function() {
console.log(this.name);
}
});
var Dog = declare('Dog', Mammal, {
makeNoise: function() {
console.log("Waf waf");
}
});
var myDog = new Dog("Pluto");
myDog.sayName();
myDog.makeNoise();
console.log("Dog: " + myDog.isInstanceOf(Dog));
console.log("Mammal: " + myDog.isInstanceOf(Mammal));
});
我不确定您收到了什么错误,但 className
参数基本上存在只是出于遗留原因。声明的 class 放置在具有该名称的全局变量中,但是当您使用 AMD 时,您并不真正需要它。
例如,如果您这样做了:
var Dog = declare('MyLibrary.Doggie', Mammal, {
makeNoise: function() {
loglog("Waf waf"); //console.log("Waf waf");
}
});
将创建一个名为 MyLibrary
的全局对象,其中包含一个名为 Doggie
的成员。所以之后,你可以写:
var myDog = new MyLibrary.Doggie("Pluto"); // instead of Dog("Pluto");
myDog.sayName();
myDog.makeNoise();
我认为现在没有任何理由这样做,所以你应该忽略 className 参数。
var Mammal = declare(null, { .... });
var Dog = declare(Mammal, { .... });
在DOJO中declare(className,superclass,props)
中的className
有什么用
在下面的示例中,我尝试在使用 in-heritage 时使用 className。
通过时 className
我收到一个错误。
declare(className,superclass,props);
className Optional
The optional name of the constructor (loosely, a "class") stored in the "declaredClass" property in the created prototype. It will be used as a global name for a created constructor.
require(["dojo/_base/declare"], function(declare) {
var Mammal = declare('Mammal',null, {
constructor: function(name) {
this.name = name;
},
sayName: function() {
console.log(this.name);
}
});
var Dog = declare('Dog', Mammal, {
makeNoise: function() {
console.log("Waf waf");
}
});
var myDog = new Dog("Pluto");
myDog.sayName();
myDog.makeNoise();
console.log("Dog: " + myDog.isInstanceOf(Dog));
console.log("Mammal: " + myDog.isInstanceOf(Mammal));
});
我不确定您收到了什么错误,但 className
参数基本上存在只是出于遗留原因。声明的 class 放置在具有该名称的全局变量中,但是当您使用 AMD 时,您并不真正需要它。
例如,如果您这样做了:
var Dog = declare('MyLibrary.Doggie', Mammal, {
makeNoise: function() {
loglog("Waf waf"); //console.log("Waf waf");
}
});
将创建一个名为 MyLibrary
的全局对象,其中包含一个名为 Doggie
的成员。所以之后,你可以写:
var myDog = new MyLibrary.Doggie("Pluto"); // instead of Dog("Pluto");
myDog.sayName();
myDog.makeNoise();
我认为现在没有任何理由这样做,所以你应该忽略 className 参数。
var Mammal = declare(null, { .... });
var Dog = declare(Mammal, { .... });