javascript之new的诡异现象

看下面函数new的过程,第一次new的时候不能访问prototype上的任何东西,原因在于js对象构造的时候原型的拷贝是先于构造函数执行的,这里和new的过程有关。由new的过程

可知,第一次person.prototype还未执行就已经赋值了默认的prototype,因此第一次访问不到任何内容。

new的过程

1、创建一个空对象

2、设置这个导弹的原型,就是指定__proto__的指向

3、将构造函数的作用域赋给新的对象(因此this就指向了新对象)

4、执行构造函数中的代码(给这个对象添加方法和属性)

5、返回这个对象(this)

function Person(){
    "use strict";
    Person.prototype={
        construct:Person,
        name:"Nooo",
        age:29,
        job:"software enginner",
        sayName:function () {
            alert("哈哈哈");
        }
    }
}
var obj=new Person();
var obj1=new Person();
console.log(obj.sayName);
console.log(obj1.sayName);