zoukankan      html  css  js  c++  java
  • 何时使用构造函数,构造函数使用new关键字

    关于何时使用js的构造函数
        一般创建多个有相同属性/方法的对象,就会去写构造函数,就会去new
        如果只是一个单独的对象,直接使用字面量就行了
    
    var person = {
        name:'postbird',
        address:'earth',
        sayHello:function(){console.log('Hello,I am ' + this.name);}
    };
    js构造函数创建对象加new问题
    
    /*
        new操作符做了些什么呢:
          1、创建一个新对象
          2、将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象)
          3、执行构造函数中的代码(为这个新对象添加属性)
          4、返回新对象。
    */
    
    function Obj(name){
        this.name = name;    
        console.log(this); // 严格模式下是undefined 非严格模式下是window对象
    }
    var a= Obj("name11"); // undefined
    a.name; //Uncaught TypeError: Cannot read property 'name' of undefined
    var b = new Obj('name22');  //Obj {name: "name22"}
    b.name; //name22
    
    
    //使用new操作符创建对象,并且构造函数没有返回值或者返回为基本数据类型,那么返回该对象
    function Obj(name){
        this.name = name;
    }
    var b = new Obj(); //Obj { name: undefined }
    
    function Obj(name){
        this.name = name;
        return 'chic';
    }
    var b = new Obj(); //Obj {name: undefined}
    
    //使用new操作符创建对象,并且构造函数返回一个引用类型
    function Obj02(name){
        this.name = name;
        return {};
    } 
    var a02 = Obj02("name11"); //Object {}
    a02.name; //undefined
    var b02 = new Obj02('name22');  //Object {}
    b02.name;//undefined
    
    /**
     * 总结:
     *  对于不加new来执行构造函数来说,返回值就是构造函数的执行结果
     *  对于加new关键字来执行构造函数而言,如果return的是基本数据类型,那么忽视掉该return值,
     *  对于加new关键字来执行构造函数而言,如果返回的是一个引用类型,那么返回该引用类型
     */
    
    
    
    
    如果你的对象有很多实例,或者涉及继承或者构造函数传参
    
    function Person(name,address){
        this.name = name;
        this.address = address;
    }
    Person.prototype.sayHello = function(){
        console.log('Hi I am ' + this.name);
    }
    
    var p1 = new Person('postbird','earth');
    var p2 = new Person('ptbird','month');
    总的来说,构造函数应用比较广泛,如果只是简单地对象,使用字面量就够了。
    
    构造函数在对象实例化、继承等应用还是比较多的
  • 相关阅读:
    MSSQL2005和Access在SQL的某一种写法上的区别。update的一种写法不一致。
    博客园 记录 了解多一点
    马克斯4.0 采集规则的编写
    谷歌代码托管 GoogleCode中 关于 版本的一个写法
    晒晒名企大公司的工资收入
    Asp.net中DataBinder.Eval用法的总结
    Mastering Debugging in Visual Studio 2010 A Beginner's Guide
    Solution Configuration but not Platform in VS2010 Toolbar
    window.showdialog完全手册,解决模态窗口,传值和返回值问题
    从此不再惧怕URI编码:JavaScript及C# URI编码详解
  • 原文地址:https://www.cnblogs.com/slightFly/p/11441122.html
Copyright © 2011-2022 走看看