Javascript dojo:在自己的类中实例化对象
假设我有一个定义如下的类(比如LinkedListNode.js):Javascript dojo:在自己的类中实例化对象,javascript,dojo,Javascript,Dojo,假设我有一个定义如下的类(比如LinkedListNode.js): // LinkedListNode.js define([ "dojo/_base/declare" ] , function (declare) { return declare(null, { constructor: function(data) { this._data = data; }, addNext: function
// LinkedListNode.js
define([
"dojo/_base/declare"
] , function (declare) {
return declare(null, {
constructor: function(data) {
this._data = data;
},
addNext: function(data) {
}
});
});
我如何在自己的定义中实例化此类的实例,如下所示:
// LinkedListNode.js
define([
"dojo/_base/declare"
] , function (declare) {
return declare(null, {
constructor: function(data) {
this._data = data;
},
addNext: function(data) {
this._next = new LinkedListNode(data);
}
});
});
下面是我在Java中尝试做的一个示例:
class LinkedListNode {
private int data;
private LinkedListNode next;
public LinkedListNode(int data) {
this.data = data;
}
public void addNext(int data) {
// How can I execute this same statement in JavaScript/Dojo?
this.next = new LinkedListNode(data);
}
}
在Dojo里你不会那样做的。您只需将新类放在您想要使用它的地方的define部分,Dojo就会为您创建instantiation。因此,如果您保存在Object.js上,您可以这样使用它:
define([
"dojo/_base/declare",
"yourpath/Object"
] , function (declare, object) {
return declare(null, {
constructor: function() {
},
test: function() {
object.whatever();
}
});
});
根据编辑进行补充
要想按您想要的方式使用,您不能使用dojo的declare系统。你必须用更传统的方式来做。Js是一种免费的语言,你可以用很多方式做事情。因此,在JS中有几种方法可以执行类似的操作。以下是三点:
函数LinkedListNode(数据){
this.addNext=函数(数据){
this.next=新的LinkedListNode(数据);
把这个还给我,下一个;
}
这个数据=数据;
}
var ll1=新的LinkedListNode(777);
ll1.addNext(555)。addNext(333);
log(ll1.next.data);
log(ll1.next.next.data);
函数LinkedListNodeV2(数据){
var self={}
self.addNext=函数(数据){
self.next=新的LinkedListNodeV2(数据);
返回self.next;
}
self.data=数据;
回归自我
}
var ll2=LinkedListNodeV2(777);
ll2.addNext(555)。addNext(333);
log(ll2.next.data);
log(ll2.next.next.data);
类LinkedListNodeV3{
建造师(数据){
这个数据=数据;
}
addNext(数据){
this.next=新的LinkedListNodeV3(数据);
把这个还给我,下一个;
}
}
var ll3=新的LinkedListNodeV3(777);
ll3.addNext(555)。addNext(333);
log(ll3.next.data);
log(ll3.next.next.data)代码>正如您在本例中所看到的,使用dojo模块declare
创建了两个dojo类。Dojo抽象类类似于Java。
使用define
定义类时,您可以随意在代码中启动它
在本例中,YourMainClass
的constructor
包含对YourClass
的实例的引用,如果该实例是启动的
现场演示:
您好,我想您的代码假定对象
是单音。我认为OP在从dojo类创建对象实例时很有趣。@GibboK这两个答案都不是我想要的…请参阅我的edits@scottyseus谢谢你的评论,你能在你的问题中添加更多细节吗。。。要在何处启动新对象();在另一个类中?我试图在自己的类定义中实例化一个新对象。我添加了一些Java代码,这些代码正是我作为引用所需要的
require(["dojo/_base/declare", "dojo/_base/lang"], function(declare, lang) {
var YourClass = declare(null, {
constructor: function(name, age, residence) {
this.name = name;
this.age = age;
this.residence = residence;
},
print: function() {
alert(this.name);
}
});
var YourMainClass = declare(null, {
constructor: function(name, age, residence) {
this.yourClassInstance = new YourClass('foo', 'bar', 'zoo');
this.yourClassInstance.print();
}
});
var yourMainClass = new YourMainClass();
});