创建json javascript类的新实例?

创建json javascript类的新实例?,javascript,json,Javascript,Json,最近我开始编写更多的javascript,我正试图以最好的方式完成这一切。使用JSON格式化我的类似乎是最干净的方式,但我遇到了一些问题,似乎它应该是非常基本的,但我只是努力在任何地方找到答案。。。也许只是因为缺乏正确的行话 到目前为止,我一直在用这种方法做事: function foo(){ this.bar = 'hello world'; this.init = function(){ alert('this.bar'); } } crow = new fo

最近我开始编写更多的javascript,我正试图以最好的方式完成这一切。使用JSON格式化我的类似乎是最干净的方式,但我遇到了一些问题,似乎它应该是非常基本的,但我只是努力在任何地方找到答案。。。也许只是因为缺乏正确的行话

到目前为止,我一直在用这种方法做事:

function foo(){
   this.bar = 'hello world';
   this.init = function(){
      alert('this.bar');
   }
}

crow = new foo();
crow.init();
这一切似乎都如我所期望的那样起作用。当我用JSON布局对象时,虽然我看不到如何创建它的新实例,但只引用了原始实例,这就破坏了我的许多用途。我做错了什么

foo = {
   bar = 'hello world';

   init:   function(){
      alert(bar);
   }

}

foo.bar(); // This alerts 'hello world'

crow = foo ;
crow.bar = 'metal' ;
crow.init(); // Outputs 'metal'
foo.init(); // Also outputs 'metal'

我是否在某个地方漏掉了要点,这是错误的方法还是我只是做错了?

如果要将类中的函数定义为对象,则需要更改函数的原型。下面是代码中的一个示例:

var foo = function() {}
foo.prototype = {
    bar: 'hello world',

    init: function() {
        alert(this.bar);
    }
};

var crow = new foo();
crow.bar = 'metal';
crow.init();
如果您使用的是javascript,了解它的工作原理是很重要的,但是John Resig有一个非常适合添加的小脚本。此添加允许使用构造函数和超级函数进行psedo继承。

如果您能够在项目中使用,则可以使用该方法实现对象深度复制:

var original = { a: 123, b: "xxx" },
    copy = $.extend(true, {}, original);

第一个输入参数true意味着复制将是深度的。

所有对象都是通过引用复制的,因此

crow = foo ;
您将获得对同一对象的引用。要创建新对象,请使用函数:

function apply(o, c){
    if(o && c && typeof c == 'object'){
        for(var p in c){
            if (c.hasOwnProperty(p) {
                o[p] = c[p];
            }
        }
    }
    return o;
};
比你能用的还多

var crow = apply({}, foo);

您不是在创建新副本,而是在复制对
foo
的引用。这不是JSON。JSON是数据的序列化格式(即传输格式),因此它始终是字符串。您所谈论的是JavaScript对象文本,它只在视觉上与JSON相关。(除此之外,您的第二个示例是一个语法错误,从不输出任何内容)根据定义,javaScript不使用classesHi。丹尼拉,怀特,这是很明显的一部分,但不是很有帮助!我意识到严格来说,这不是课堂,但仍然非常方便@托马拉克你是说这不是解决问题的方法?如果没有,我应该搜索什么信息?这看起来和我一直在寻找的完全一样,干杯!这种方法是否有任何已知的问题,或者它是一种相当标准的处理方法?这是用javascript创建“类”的标准方法。正如另一张海报所提到的,类、对象和函数之间的术语在javascript中有点混乱。您可以使用new关键字将函数实例化为“class”对象。原始函数的原型将以其原始形式提供给任何实例,函数可以使用
this
关键字访问对发起函数调用的对象的引用。使用
this
关键字更改参数时,仅更新单个实例中的数据。