Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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 new不创建新对象_Javascript_Class_Oop_Object - Fatal编程技术网

javascript new不创建新对象

javascript new不创建新对象,javascript,class,oop,object,Javascript,Class,Oop,Object,我试图从同一个类定义中获取两个对象。然而,它们似乎具有相同的属性。我能做什么 我只是为了别的事才这么做的 myclass = function() { this.data = []; }; 现在您只需执行myclass.data= 就我个人而言,我会这样做: var MyNameSpace = { SomeFunction: function() { Some code }; this.somevariable = somevalue; }; 然后您可以转到m

我试图从同一个类定义中获取两个对象。然而,它们似乎具有相同的属性。我能做什么


我只是为了别的事才这么做的

myclass = function() {
    this.data = [];

};
现在您只需执行myclass.data=

就我个人而言,我会这样做:

var MyNameSpace = {
  SomeFunction: function() { 
    Some code
  };
  this.somevariable = somevalue;
};

然后您可以转到myNameSpace.myfunction或myNameSpace.myVar=Value

您可以得到如下所示的结果:

myclass = function() {
    this.data = Math.random(1000);
};

//myclass.prototype.data = [];

var a = new myclass();   
var b = new myclass();

请参阅elclanrs的评论

var Myclass = function() {
    this.data = [];
    this.data.push(Math.random(1000));
};

您需要在构造函数中声明成员变量,而不是将其作为原型的一部分。javascript中的oop可能是丑陋和不直观的。这就是为什么有那么多面向对象的javascript库


数据是共享的,因为您将其放入了原型中。在构造函数中将数据声明为自己的属性。另外,使用var来声明变量,并将构造函数大写作为约定,这样您就不会忘记new。@elclanrs如何将其标记为自己的属性?嗯,Math.random不接受参数,也不返回数组。我不知道这怎么可能达到OP的要求。你只是把一个随机数放入这个数据中。OP希望每个实例都有一个唯一的数组,该数组的种子是唯一的值。关于random不接受参数,您是正确的,但请仔细阅读问题。他没有要求数组,他只是问为什么同一类的两个实例返回相同的随机数值。这个答案不满足那个问题吗?请看JSFIDLE。这个答案相当令人困惑。为什么要使用名称空间?为什么要将数据更改为某个变量?为什么你还没有完全写出一些代码?最后的| |{}的意义是什么?我使用了一个名称空间,因为如果他继续这样做,他将需要从应用程序中的许多地方访问他的代码,所以将其放在那里是有意义的。这个问题与数据无关,特别是与变量作用域有关,对于| |{},我似乎超出了剪切和粘贴的范围,或者将其混淆了,即使是大型项目也不总是受益于文件中的名称空间。无论如何,OP的代码可能是一个更长脚本的精简版本,因此我们可以集中精力于重要的内容,其中可能已经包含名称空间。我意识到解释一般原则至少和修复这个bug一样重要,但我仍然认为重命名数据令人困惑。没有必要指出,无论财产的名称如何,同样的原则都适用。有时指出OP可能遗漏的问题是好的,但你必须澄清这是一个离题,而不是答案的一部分。是的,我接受这一点,也许是因为我最近也遇到了同样的问题,因为我刚从C转到JS,所以我有阅读字里行间的优势。我将很快修改我的答案,以更好地反映答案背后的思维过程。从我的角度来看,没有任何理由不使用这样的名称空间,从编程的角度来看,我为什么要使用Windows。因为它不是窗口类的一部分,所以它没有连接该名称空间的位置。
var Myclass = function() {
    this.data = [];
    this.data.push(Math.random(1000));
};
ds.make.class({
    type: 'MyClass',
    constructor: function(x){
        this.a = x;
    }
});

var c1 = new MyClass(1);
var c2 = new MyClass(2);

console.log( c1.a ); // output: 1
console.log( c2.a ); // output: 2