为什么这些对象具有不同的构造函数?

时间:2013-11-20 02:02:02

标签: javascript

我是JavaScript的新手并尝试创建对象。案例2工作正常,但案例1没有显示我期望的输出。

问题:为什么我能够在案例2中查看构造函数而不是案例1?

案例1

function newemp() {
    return {
        'name':'bob',
        'age':20
    };
}
fred = newemp()
document.write(fred.constructor)

案例2

function employee(name,jobtitle,born) {
    this.name=name;
    this.jobtitle=jobtitle;
    this.born=born;
}

var fred=new employee("Fred Flintstone","Caveman",1970);
document.write(fred.constructor);

输出案例1

function Object() { [native code] }

输出案例2

function employee(name, jobtitle, born) { this.name=name; this.jobtitle=jobtitle;` this.born=born; }

2 个答案:

答案 0 :(得分:3)

在第一种情况下,只是从函数newemp返回一个对象文字而你所看到的是Javascript对象的默认构造函数。 javascript中的每个对象都有一个内置的构造函数。您所看到的就是您将要看到的内容:

var ob = {};
console.log(ob.constructor);

在第二种情况下,您使用关键字创建类型为employee的对象,构造函数指向employee

由于构造函数不是只读的,因此可以在函数内部进行设置。 (但我不确定为什么在你的特定情况下你根本不需要它)

function newemp() {
    var ob =  {
        'name': 'bob',
            'age': 20
    };
    ob.constructor = newemp; //Set the constructor
    return ob;
}
fred = newemp();
console.log(fred.constructor);

Some reference

答案 1 :(得分:0)

这可能有助于解决案例1问题

var anObj = {
    a: "test",
    b: "jest"
};

var bObj = Object.create(anObj);
相关问题