在javascript中创建对象的两种方法

时间:2011-07-12 01:37:02

标签: javascript jquery json object stringify

我正在通过执行以下操作来创建javascript对象:

function field(name,label){
        this.name = name
        this.label= label;
}

var a = new field("market","Mkt").

然后我将a分配给另一个对象。

object.newField = a;

第二种方法是直接创建新属性

object.2ndNewField = {
    name: "market2",
    label:"Mkt2"
}

我尝试读取其他功能中的对象。但是,当我对对象进行字符串化时,它们表现不一样。我创建的两个属性之间有什么区别?

btw下列物体有什么不同吗?

 object.2ndNewField = {
        "name": "market2",
        "label":"Mkt2
    }

2 个答案:

答案 0 :(得分:6)

不同之处在于,在第一种情况下,创建的对象继承自 field.prototype ,然后 Object.prototype (即其内部[[Prototype]]是字段。原型,其内部[[Prototype]]是 Object.prototype ),与第二种情况一样,它只从 Object.prototype 继承。

另一种看待它的方法是:

object.newField instanceof field; // true
object.newField instanceof Object; // true

object.newField2 instanceof field; // false
object.newField2 instanceof Object; // true

或继承链是:

object.newField  -> field.prototype -> Object.prototype -> null

object.newField2 -> Object.prototype -> null

其中' - >'意思是“继承自”。

答案 1 :(得分:1)

对于第一个选项...远离使用“新”。如果错误地使用“new”,或者在使用“new”时将其省略,则可能会严重影响全局命名空间。此外,您必须在代码中的某些位置小心使用“this”,因为它可能绑定到您认为不可能的内容,甚至绑定到您的全局数据。

在您提供的第二个选项中,您可以安全地将其用于仅用作数据/方法集合的对象(即不是“类类”行为)。如果你想要一些你可以使用私有和公共变量/方法创建多个实例并且可以从中继承的东西,那么你应该使用一个返回一个对象的函数。

我做了一个非常大的编写和示例 here ,如何安全地创建基础对象和使用继承。如果您点击链接,您将看到为什么我没有在这篇文章中重新输入所有内容;)。

希望这会有所帮助......