我是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; }
答案 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);
答案 1 :(得分:0)
这可能有助于解决案例1问题
var anObj = {
a: "test",
b: "jest"
};
var bObj = Object.create(anObj);