美文网首页Web 前端开发 技术干货
普通函数和构造函数的区别

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

作者: var_Change | 来源:发表于2017-03-08 16:15 被阅读0次

构造函数

构造函数:如用函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数(constructor)

普通函数

普通函数:不使用new运算符的函数就是普通函数

构造函数vs普通函数

从形式上看,一个函数被作为构造函数还是普通函数执行的唯一区别就是是否使用new

function Person(){
    this.name = "zqq";
    this.age = 28;
}
var p = new Person();

当以new调用构造函数(执行var p = new Person())时,函数内部会发生以下情况:

1.创建一个空对象

var p = {};

2.this变量指向对象p

Person.call(p)

3.p继承了构造函数Person()的原型

p.__proto__ = Person.prototype

4.执行构造函数Person()内的代码

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

1.构造函数使用new关键字调用;普通函数不用new关键字调用;

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

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

2.1 在构造函数内部,this指向的是构造出来的新对象
2.2 在普通函数内部,this指向的是window全局对象

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

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

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

3.3 如果使用了return,那返回值会根据return值的类型而有所不同

<a href="https://segmentfault.com/a/1190000008472264">这里涉及到要了解的知识点有基本数据类型和引用类型的区别</a>

3.3.1 return的是五种简单数据类型:String,Number,Boolean,Null,Undefined的话,构造函数会忽略return的值,依然返回this对象;而普通函数会返回return后面的值

function Person(){
    var a;
    this.name = "zqq";
    this.age = 28;
    return a;
}
var p = new Person();//返回this对象
var p = Person();//因为a没初始化,所以a是undefined,而undefined属于简单数据类型,所以返回undefined,String,Number,Boolean,Null同理

3.3.2 如果return的是引用类型:Array,Date,Object,Function,RegExp,Error的话,构造函数和普通函数都会返回return后面的值

function Person(){
    var arr = [];
    this.name = "zqq";
    this.age = 28;
    return arr;
}
var p = new Person();//返回arr空数组,Date,Object,Function,RegExp,Error同理
var p1 = new Person();//返回arr空数组,Date,Object,Function,RegExp,Error同理

4.构造函数首字母建议大写;普通函数首字母建议小写

参考资料:
https://my.oschina.net/u/2395167/blog/658234
http://www.jb51.net/article/47871.htm

相关文章

  • 原型链,对象,构造函数之间的一些联系

    构造函数: 构造函数跟普通函数没什么区别,都是由function定义的,为了和普通函数做区别,一般构造函数首字母大...

  • 第六章 创建对象

    构造函数 constructor和instanceof区别 构造函数和普通函数区别 原型模式理解原型对象isPro...

  • js中普通函数和构造函数的区别

    1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写 2、构造函数和普通函数的区别在于...

  • 构造函数与普通函数:

    1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写 2、构造函数和普通函数的区别在于...

  • js理解普通函数和箭头函数

    普通函数: 箭头函数: 区别: 构造函数和原型 箭头函数不能作为构造函数 不能new。会报错 箭头函数没有原型属性...

  • JS-理解原型与原型链

    构造函数 构造函数就是一个普通的函数,创建方式和普通函数没有区别,不同的是构造函数习惯上首字母大写。另外就是调用方...

  • JavaScript 构造函数和创建实例化对象的过程

    1. 构造函数和普通函数的区别 构造函数在使用时,需要用 new 关键词创建一个基于构造函数的实例化对象普通函数在...

  • 普通函数和构造函数

    普通函数与构造函数的区别 1.普通函数默认返回值是undefined,构造函数返回一个实例的对象2.普通函数与构造...

  • 普通函数和构造函数

    普通函数与构造函数的区别 1.普通函数默认返回值是undefined,构造函数返回一个实例的对象2.普通函数与构造...

  • 普通函数和构造函数

    普通函数与构造函数的区别 1.普通函数默认返回值是undefined,构造函数返回一个实例的对象2.普通函数与构造...

网友评论

    本文标题:普通函数和构造函数的区别

    本文链接:https://www.haomeiwen.com/subject/viwbgttx.html