3 普通函数和构造函数的区别

JS构造函数与普通函数区别
本文详细对比了JavaScript中构造函数与普通函数的特点及使用差异,包括命名、调用方式、this指向及返回值等方面,并通过实例演示了两者的工作原理。

1 命名方式:

         构造函数名称通常首字母要大些。

          普通函数名称首字母要小写,使用驼峰命名方式。

2 调用方式:

        构造函数需要使用new运算符调用,如果构造函数没有参数可以省略小括号,比如new Object。

        普通函数的调用不需要new运算符,而且必须要有小括号。 关于new的作用可以参阅js的new运算符的作用简单介绍一章节。

var p = new Person();
var p = Person();

function fn() { }

     构造函数:1. new fn( )

                     2 .构造函数内部会创建一个新的对象,即f的实例

                     3. 函数内部的this指向 新创建的f的实例

                     4. 默认的返回值是f的实例

     普通函数:1. fn( )

                     2. 在调用函数的内部不会创建新的对象

                     3. 函数内部的this指向调用函数的对象(如果没有对象调用,默认是window)

                     4. 返回值由return语句决定

3 this的指向问题:

构造函数内部可以使用this关键字;普通函数内部不建议使用this,因为这时候this指向的是window全局对象,这样无意间就会为window添加了一些全局变量或函数

4 构造函数默认不用return返回值;普通函数一般都有return返回值

3.1 构造函数会默认返回this,也就是新的实例对象

3.2 普通函数如果没有return值的话,返回undefined

3.3 如果使用了return,那返回值会根据return值的类型而有所不同
看一个常见的面试题
复制代码

 1 <script>
 2     function foo() {
 3         var f2 = new foo2();
 4         console.log(f2);    //{a: 3}
 5         console.log(this); //window
 6         return true;
 7     }
 8     function foo2() {
 9         console.log(this); //foo2类型的对象 不是foo2函数
10 //        this.age = 30;
11         return {a: 3};
12     }
13     var f1 = foo();
14     console.log(f1); // true
15 </script>

JavaScript中的普通函数与构造函数

与普通函数相比,构造函数有以下明显特点

  1. 用new关键字调用 var prince=new Prince("charming",25);
  2. 函数内部可以使用this关键字
    在构造函数内部,this指向的是构造出的新对象。用this定义的变量或函数/方法,就是实例变量或实例函数/方法。需要用实例才能访问到,不能用类型名访问。 prince.age;//25 Prince.age;//undefined
  3. 默认不用return返回值 构造函数是不需要用return显式返回值的,默认会返回this,也就是新的实例对象。当然,也可以用return语句,返回值会根据return值的类型而有所不同,
  4. 函数命名建议首字母大写,与普通函数区分开。 不是命名规范中的,但是建议这么写。

使用new关键字实例化的时候发生了什么?

以上文中的Prince()函数举个栗子:

  1. 第一步,创建一个空对象。 var prince={}
  2. 第二步,将构造函数Prince()中的this指向新创建的对象prince。
  3. 第三步,将prince的_proto_属性指向Prince函数的prototype,创建对象和原型间关系
  4. 第四步,执行构造函数Prince()内的代码。

构造函数有return值怎么办?

构造函数里没有显式调用return时,默认是返回this对象(这个时候,必须要 使用new关键字来调用吧),也就是新创建的实例对象。 当构造函数里调用return时,分两种情况:

  1. return的是五种简单数据类型:String,Number,Boolean,Null,Undefined。 这种情况下,忽视return值,依然返回this对象。

  2. return的是Object 这种情况下,不再返回this对象,而是返回return语句的返回值。

    function Person(name){
        this.name=name;
        return {name:"cherry"}
    }
    var person=new Person("sheila");
    person.name;//cherry
    person;//Object {name: "cherry"}

转载:https://segmentfault.com/a/1190000008615288

Java中构造函数普通函数存在多方面的区别: 1. **定义格式**:构造函数的定义格式为访问控制符(如public等)加上与类名一致的方法名,参数可有可无;而普通函数则遵循一般的函数定义规则,有明确的返回类型声明等。例如构造函数`public Math()`,普通函数`public void math()` [^1]。 2. **功能用途**:构造函数主要在构建对象时对对象进行初始化,必须与`new`运算符一起使用;普通函数则用于实现各种具体的业务逻辑,完成特定的功能,比如进行计算、数据处理等 [^1]。 3. **返回值**:构造函数没有返回值,也不能用`void`来修饰;普通方法必须有返回值类型声明,如果没有返回值则使用`void`修饰 [^1]。 4. **命名规则**:构造函数的名称必须类名一致,一般首字母大写普通函数遵照小驼峰式命名法,即第一个单词首字母小写,后续单词首字母大写 [^1]。 5. **调用方式**:构造函数不能被直接调用,必须通过`new`运算符在创建对象时才会自动调用;普通方法是在程序执行到它的时候被调用 [^1]。 6. **调用优先级**:构造函数在`new`对象时自动调用,其优先级高于普通方法 [^1]。 以下是示例代码: ```java public class Math { private int count; // 构造函数 public Math() { System.out.println("此为构造方法"); } // 普通方法 public void math() { System.out.println("此为普通方法"); } public int add() { count++; return count; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } } public class Text { public static void main(String[] args) { // 初始化对象,调用构造函数 Math a = new Math(); // 调用普通方法 a.math(); int count = a.getCount(); System.out.println(count); a.add(); int count1 = a.getCount(); System.out.println(count1); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值