资讯专栏INFORMATION COLUMN

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

Airmusic / 1962人阅读

摘要:构造函数构造函数如用函数用来初始化使用运算符一个新建的对象,我们称之为构造函数普通函数普通函数不使用运算符的函数就是普通函数构造函数普通函数从形式上看,一个函数被作为构造函数还是普通函数执行的唯一区别就是是否使用当以调用构造函数执行时,函数

构造函数

构造函数:如用函数用来初始化(使用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值的类型而有所不同

(这里涉及到要了解的知识点有基本数据类型和引用类型的区别)

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/2395...
http://www.jb51.net/article/4...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86815.html

相关文章

  • function作为构造函数构造函数调用区别

    摘要:把这个执行上下文压入调用栈的顶部,即设置成运行执行上下文。函数作为构造函数调用没有继承关系有继承关系我们把一个函数被当作构造函数,使用操作符调用时发生的主要步骤新建一个普通对象,把其原型指向构造函数的属性的值。把当前执行上下文弹出调用栈。 var currentTime = Date() 能生成一个当前时间的日期对象,var currentTime = new Date() 也能生成一...

    didikee 评论0 收藏0
  • 关於Javascript中new运算符,构造函数与原型链一些理解

    摘要:前言文章主要基于高级程序设计总结的基本重写了全文补充知识点新增实例优化排版新增检测方法技巧用法构造函数创建一个用护定义的对象类型的实例或具有构造函数的内置对象类型之一命令执行构造函数返回一个实例对象构造函数一个指定对象实例的类型的函数传惨一 前言 文章主要基于>总结的!!!PS: 2018/05/09 基本重写了全文,补充知识点,新增实例,优化排版PS: 2018/05/11 新增检测...

    cikenerd 评论0 收藏0
  • js中箭头函数普通函数区别

    摘要:不可以当作构造函数,也就是说,不可以使用命令,否则会抛出一个错误。正是因为它没有,所以也就不能用作构造函数。总结箭头函数的永远指向其上下文的,任何方法都改变不了其指向,如普通函数的指向调用它的那个对象 一、前言 首先看下直观的区别 // 箭头函数 let fun = () => { console.log(lalalala); } ...

    TerryCai 评论0 收藏0
  • 对,那是我夕阳下奔跑(刚过凌点,‘思否’第一篇文章 小白开始认真了 哈哈)

    摘要:我们将通过一个构造函数创建的对象,称为是该类的实例孙悟空男玉兔精女奔波霸男使用可以检查一个对象是否是一个类的实例语法对象构造函数如果是,则返回,否则返回所有的对象都是的后代,所以任何对象和做检查时都会返回 使用对象字面量模式来创建一个对象 (它也叫单例模式 //JS与其他语言的单例模式有很大的区别(如Java),但这就是语言的区别) var obj = {}; ...

    vpants 评论0 收藏0
  • 静态工厂方法替代构造方法

    摘要:工厂方法模式工厂方法模式是一种设计模式,指的是让具体的工厂对象负责生产具体的产品对象。在我们使用构造函数创建对象的时候,我们每次时,都将创建一个新的对象,而如果我们通过静态工厂方法时,我们可以返回系统中已存在的对象。 目录: 普通构造方法与静态工厂方法 静态工厂方法与设计模式中的工厂方法区别 静态工厂方法的优势 静态工厂方法的缺点 普通构造方法与静态工厂方法 普通构造方法创建对象...

    浠ラ箍 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<