var tes1=new Object();
console.log(tes1.constructor);
console.log(tes1.__proto__);
Object() { [native code] }
Object {}
function test(){
this.name="myName";
}
var tes2 = new test();
console.log(tes2.constructor);
console.log(tes2.__proto__);
result:
test(){
this.name="myName";
}
Object {}
1.当new 一个函数时,先创建一个{}对象,该对象的constructor为new 关键字后的函数,prototype为Object{}(js中Object为所有对象的父类,
将生成对象的 prototype设为Object{}就达到了这种效果,也可显式设置prototype,)之后执行constructor的代码,若代码中的有this,那么这个this代表{},所以constructor中的this.属性|方法会在{}中生成。
对于其它的方式生成的对象
如:
var tes3={};
console.log(tes3.constructor);
console.log(tes3.__proto__);
result:
Object() { [native code] }
我们可以发现其结果和new Object()相同可以得出,以该种方式创建的对象和之前无差别Object {}
但当我们执行以下代码时(函数本身也是一个对象)
console.log(test.constructor);
console.log(test.__proto__);
result
Function() { [native code] }
() {}
通过以上分析可得:在我们定义一个函数时js会生成一个{}对象,constructor为Function(){[nateiv code]},通过该方法对该函数对象进行初始化(使用本地代码)prototype为一个匿名函数(该匿名函数有指向Object的原型),使得该函数通过原型连接到Object对象上构成原型链
HelloWorld