Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript dojo:在自己的类中实例化对象_Javascript_Dojo - Fatal编程技术网

Javascript dojo:在自己的类中实例化对象

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):

// 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();
});