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

Pro*_*mer 7 javascript jquery json object stringify

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

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

var a = new field("market","Mkt").
Run Code Online (Sandbox Code Playgroud)

然后我分配给另一个对象.

object.newField = a;
Run Code Online (Sandbox Code Playgroud)

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

object.2ndNewField = {
    name: "market2",
    label:"Mkt2"
}
Run Code Online (Sandbox Code Playgroud)

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

顺便问一下这个对象有什么区别吗?

 object.2ndNewField = {
        "name": "market2",
        "label":"Mkt2
    }
Run Code Online (Sandbox Code Playgroud)

Rob*_*obG 6

不同的是,在第一种情况下,所创建的对象从继承field.prototype然后Object.prototype中(即,其内部的[[Prototype]]是field.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
Run Code Online (Sandbox Code Playgroud)

或者继承链是:

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

object.newField2 -> Object.prototype -> null
Run Code Online (Sandbox Code Playgroud)

其中' - >'表示"继承自".