构造函数

    1. function Preson(){
    2. this.name = name,
    3. this.age = age,
    4. }
    5. let temp = new Person()
    6. /*
    7. 构造函数返回 对象 (返回this)
    8. 如果手动加 return+基本数据类型则依然返回this
    9. 如果是引用数据类型,则返回引用数据的地址 eg:[1,2,3] 或者 {}
    10. */
    11. let temp = Person()
    12. //因为函数没有返回值,所以肯定是undefined
    13. log(typeof temp) //object
    14. log(typeof temp) //undefind 的类型 也是undefind

    new 的四个步骤
    - 创建了一个该类型的新的空对象{}
    - 就像是:let obj = { }
    - 将这个新对象的
    proto 属性指向了类的 prototype
    - _obj._pro
    = Cat.prototype
    - 将构造函数内部的 this 指向了实例对象并执行构造函数中的代码
    - this —> _obj // obj.name = name; log…(函数体内部数据)
    - 返回新数组对象 _obj
    - return 简单数据类型不影响返回值,复杂数据类型就返回该数据 // let xiaohua = obj

    1. //构造函数
    2. //手动添加return
    3. //若return后是基本数据类型,则依然返回this
    4. //若return后是引用数据类型,则返回引用数据类型的地址
    5. function Person(name, age, money) {
    6. // 1this = {};
    7. // 2this = {
    8. // name: un,
    9. // age: un,
    10. // money: un
    11. // song:fn
    12. // __proto__:001 //赋值一个想像的引用地址
    13. // }
    14. this.name = name;
    15. this.age = age;
    16. this.money = money;
    17. this.song = function() { console.log(this.name); }
    18. // 4this.__proto__ = Person.prototype;
    19. //相当于将 Person.prototype 的引用地址给到 this.__proto__
    20. // 5this = p1;
    21. // 6return this;
    22. }
    23. let p1 = new Person('z3', 18, 100);
    24. console.log(p1);
    25. let p2 = new Person('l4', 18, 100);
    26. console.log(p1.__proto__.constructor == Person); // true
    27. console.log(p1.__proto__.constructor === Object); // false
    28. console.log(p1.__proto__.constructor.__proto__ === Function.prototype);
    29. console.log(p1.__proto__.constructor.__proto__.constructor === Function);