zoukankan      html  css  js  c++  java
  • JS实例化过程总结(附原型链图解)

    没有返回值的构造函数形式

    function Person(name,age){
        this.name = name;
        this.age = age;
        this.show = function(){
            console.log('每个人的身上都有毛毛');
        }
    }
    
    
    var person = new Person('LiMing',22);
    console.log(person);
    person.show();//如果不调用,不会输出
    console.log(person instanceof Person);
    console.log(person.__proto__ == Person.prototype);

    运行结果如下:

     如果实例没有调用方法,图中圈出的部分不能被输出;

    根据图中显示结果,我们可以得出以下结果:

    1.创建了一个object对象{};
    2.将构造函数的静态属性传递给创造的对象;
    3.实例对象额外添加了__proto__属性,指向了构造函数的prototype属性,也就是原型对象;
    4.构造函数的原型对象有一个constructor方法,返回值为构造函数;
    5.构造函数内的this指向为实例对象;
    另外:如果实例没有调用构造函数的方法,不会输出图中画框的部分;

    如果有返回值的情况1:返回值为基本数据类型

    function Person1(name,age){
        this.name = name;
        this.age = age;
        this.show = function(){
            console.log('每个人的身上都有毛毛');
        };
        return 22
    }
    
    
    var person1 = new Person1('LiMing',22);
    console.log(person1);
    person1.show();
    console.log(person1 instanceof Person1);
    console.log(person1.__proto__ == Person1.prototype);

     从结果看,基本的数据类型不影响实例过程;

    如果有返回值的情况2:返回值为引用数据类型

    var person2 = new Person2('LiMing',22);
    console.log(person2);
    person2.show();
    console.log(person2 instanceof Person2);
    console.log(person2.__proto__ == Person2.prototype);
    
    
    function Person3(name,age){
        this.name = name;
        this.age = age;
        this.show = function(){
            console.log('每个人的身上都有毛毛');
        };
        return {
            weight:70,
            height:185,
            show:function () {
                console.log('你是我天边最美的云彩!')
            }
        }
    }
    
    
    var person3 = new Person3('LiMing',22);
    console.log(person3);
    person3.show();
    console.log(person3 instanceof Person3);
    console.log(person3.__proto__ == Person3.prototype);
    
    function Person4(name,age){
        this.name = name;
        this.age = age;
        this.show = function(){
            console.log('每个人的身上都有毛毛');
        };
        return [12,23,'345',{name:'LiHua'}]
        
    }
    
    
    var person4 = new Person4('LiMing',22);
    console.log(person4);
    person4.show();
    console.log(person4 instanceof Person4);
    console.log(person4.__proto__ == Person4.prototype);

     从结果看,如果构造函数返回一个object的话,实例为返回的对象;

    最后,附上一张本人觉得比较好的原型链图解

    其中中间颜色加深部分,分为三种构造器,

    1>自定义构造器;
    2>对象构造器;
    3>内置对象构造器(例如Array,String,Date,Match);

    博观而约取
  • 相关阅读:
    常用 SQL Server 规范集锦
    让Git忽略所有obj和bin目录的同步
    Sql server 存储过程基础语法
    nginx 站点代理,负载均衡
    CentOS7.0安装Nginx-1.12.0
    CentOS7安装GNOME可视化界面和如何配置IP地址
    开发工具资料集合
    NOIP2018总结反思
    NOIP2018考试报告
    STL基础用法
  • 原文地址:https://www.cnblogs.com/EssMin/p/14629111.html
Copyright © 2011-2022 走看看