构造函数不仅只出现在JavaScript中,它同样存在于很多主流的程序语言里,比如c++、Java、PHP等等。与这些主流程序语言一样,构造函数在js中的作业一样,也是用来创建对象时初始化对象,并且总与new运算符一起使用。

在js中,构造函数与普通函数的区别不是很大。接下来就主要讲讲两者的区别。

1.在命名规则上,构造函数一般是首字母大写,普通函数则是遵照小驼峰式命名法。

2.在函数调用时,

  1. 1 //构造函数
  2. 2 function Egperson (name,age) {
  3. 3 this.name = name;
  4. 4 this.age = age;
  5. 5 this.sayName = function () {
  6. 6 alert(this.name);
  7. 7 }
  8. 8 }
  9. 9 var person = new Egperson('mike','18'); //this-->person
  10. 10 person.sayName(); //'mike'
  11. 11
  12. 12
  13. 13 //普通函数
  14. 14 function egPerson (name,age) {
  15. 15 this.name = name;
  16. 16 this.age = age;
  17. 17 this.sayName = function () {
  18. 18 alert(this.name);
  19. 19 }
  20. 20 }
  21. 21 egPerson('alice','23'); //this-->window
  22. 22 window.sayName(); //'alice'

可以看出:

1)构造函数内部会创建一个实例,调用普通函数时则不会创建新的对象。

2)构造函数内部的this指向是新创建的person实例,而普通函数内部的this指向调用函数的对象(如果没有对象调用,默认为window)

3.返回值

返回值方面,对于构造函数而言,如果返回值是基本数据类型,那么返回值就是this指向的实例;如果是复杂数据类型,那么返回值为对象(不知道这句话对不对)

刚刚看了一篇文章感觉深受感动,看完之后,真有拨云见日的感觉!我把链接放在下面,感兴趣的可以去看看,博主是以故事的形式讲述了JavaScript的对象问题,文笔简洁却不失趣味,非常易懂~

http://www.cnblogs.com/aishangJava/p/7232680.html

我感觉创造实例的原因是因为new ,而不是因为他是“构造函数”,构造函数的名称首字母大写是约定。浏览器并不会因为函数的首字母是否大写来判断这个函数是不是构造函数。您写的普通函数若果也通过New创建也依旧可以打上构造函数的效果。如果不想用new,也可以加一个return语句。这是我的一些见解,如果有啥问题,望提醒。
补充:构造函数返回都是对象。也可以在构造函数中显示调用return.如果return的值是一个对象,它会代替新创建的对象实例返回。如果返回的值是一个原始类型,它会被忽略,新创建的实例(对象)会被返回。

#2楼 2018-04-13 17:44 听风是风

1.this会指向new过程中构造函数返回的实例,这个实例就像原构造函数属性所拷贝出来的副本。
2.return会改变构造函数的this指向,如果return的是对象(object,function),this就会指向这个对象,如果不是,则this还是指向new出来的实例。null虽然类型是object,但return null不会修改this指向。
 
 

js中构造函数与普通函数的区别的更多相关文章

  1. JavaScript总结学习一:js中构造函数与普通函数的区别

    构造函数不仅只出现在JavaScript中,它同样存在于很多主流的程序语言里,比如c++.Java.PHP等等.与这些主流程序语言一样,构造函数在js中的作业一样,也是用来创建对象时初始化对象,并且总 ...

  2. JS 中构造函数和普通函数的区别(详)

    1.构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写 2.构造函数和普通函数的区别在于:调用方式不一样.作用也不一样(构造函数用来新建实例对象) 3.调用方式不一样. 普通 ...

  3. JS 中构造函数和普通函数的区别

    原来只是随意的了解了下 , 但是最近有点忘了 于是详细了解下 加深下印象. 1.构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写 2.构造函数和普通函数的区别在于:调用方式 ...

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

    this简介: this永远指向当前正在被执行的函数或方法的owner.例如: 1 2 3 4 5 function test(){   console.log(this); } test(); // ...

  5. JS中构造函数和普通函数有什么区别

    JS中构造函数有普通函数有什么区别? 1.一般规则 构造函数都应该以 一个大写字母开头,eg: function Person(){...} 而非构造函数则应该以一个小写字母开头,eg: functi ...

  6. javascript中构造函数与普通函数的区别还有关于“new”操作符的一些原理

    有一种创建对象的方法叫做工厂模式,例如: function person(name,age){ var o=new Object(); o.name=name; o.age=age; return o ...

  7. java中构造函数和一般函数的区别

    构造方法 特点: 1.方法名称和类名相同 2.不用定义返回值类型 3.不可以写return语句 作用: 给对象初始化 构造方法的细节: 当一个类中没有定义构造函数时,系统会默认添加一个无参的构造方法. ...

  8. C++中构造函数,拷贝构造函数和赋值函数的区别和实现

    C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象 ...

  9. js中callback.call()和callback()的区别

    js中callback.call()和callback()的区别在js中callback.call()和callback() 有什么区别,举个例子:function a(){alert('hello! ...

随机推荐

  1. 安裝PHPBB

    1.下載PHPBB https://www.phpbb.com/downloads/ 2下載PHP http://windows.php.net/download/ 很多教程都介紹在WIN7用ISAP ...

  2. Singleton模式(单例模式) 饿汉式和懒汉式

    目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例. 好比一个国家就只有一个皇帝(XXX),此时每个人叫的“皇帝”都是指叫的XXX本人; 常见单例模式类型: 饿汉式单例:直接将对 ...

  3. Linux 文件存在程序找不到文件

    1. 编码格式 程序运行时的编码格式和传输到程序中参数的编码格式是否一致,可以在程序中打印日志进行验证: 2. 转义符 文件路径中存在转义符 3. 运行程序的用户身份 不同用户运行程序也可能导致编码格 ...

  4. 去除IntelliJ IDEA对重复代码的检测

    方法1:  方法2:(比较简便) 

  5. ELK日志解决方案

    1.方案整体设计 FileBeats+Logstash+ElasticSearch+Kibana 1)ElasticSearch 简称ES,用来做日志数据的存储,当然也可以存储其他数据, ES是互联网 ...

  6. 全国数据json

    { "provinces": { "province": [ { "ssqid": "110000", "ss ...

  7. SQL-W3School-高级:SQL PRIMARY KEY 约束

    ylbtech-SQL-W3School-高级:SQL PRIMARY KEY 约束 1.返回顶部 1. SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录 ...

  8. C之输入输出

    %d - int%ld – long (long int)%lld - long long%hd – short 短整型 (half int) %c - char%f - float%lf – dou ...

  9. 004-log-common-logging,Apache整合日志框架JCL门面框架、JCL+log4j

    一.概述 Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具.它提供给中间件/日志工具开发者一个 ...

  10. 在谷歌中缓存下载视频离线观看,js代码

    var download=function(urlInfo) { when(createFile(localFileName)) .then(function (fileInfo) { var dow ...