有一种创建对象的方法叫做工厂模式,例如:

 function person(name,age){
var o=new Object();
o.name=name;
o.age=age;
return o;
}
var per=person("Li",44);
alert(per.name); //Li
alert(per.age); //

这种方式其实就是一个普通函数,在函数内部创建一个对象,并为其添加属性,最后将对象最为返回值赋值给调用者。还有一种方式即利用构造函数来创建对象,例如:

 function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
}
var per=new Person("Li",22,"student");
alert(per.name); //"Li"
alert(per.age); //
alert(per.job); //"student

这种方法通过使用“new“操作符来创建对象实例。与工厂模式的不同之处在于:

1.没有显示创建对象;

2.直接将属性和方法赋给了”this“对象;

3.没有return语句;

虽然是构造函数,但它也是一个函数,只不过可以用来创建对象而已,所以它也可以当作普通函数调用,即不适用” new“操作符:

当它作为普通函数调用时,由于函数在全局环境中被调用,所以里面的this指向的是window,执行完该函数后即为window对象添加了三个属性,而当用new操作符调用时会经历以下几个步骤:

1.创建一个空对象;

2.将构造函数的作用域赋值给新对象,this就指向了新对象;

3.执行构造函数中的代码,为新对象添加属性;

4.返回对象;

如果普通函数使用new会怎样呢?

之前的工厂模式用new调用:

这样也最终也创建一个实例对象,这是因为new操作符最终总要返回一个对象,这个对象要么是实例对象,要么是return语句指定的对象或数组,所以即便是普通函数也可以使用new操作符调用,由于这个例子中函数最终返回的是一个对象,所以在使用new操作符后就把该对象返回。如果该函数没有返回值,则会返回一个空对象:

如果一个构造函数内部有return语句,则使用new会返回return指定的对象,如果return语句中返回的不是引用类型而是基本数据类型则会忽略依然返回this对象:

返回基本数据类型:

 function Person(name){
this.name=name;
var age=33;
return age;
}
var per=new Person("Li");
alert(per.name);//弹出“Li”

返回对象:

 function Person(name){
this.name=name;
return {name:"Wang"};
}
var per=new Person("Li");
alert(per.name); //弹出”Wang"而不是“Li”

javascript中构造函数与普通函数的区别还有关于“new”操作符的一些原理的更多相关文章

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

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

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

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

  3. 深入理解Javascript中构造函数和原型对象的区别

    在 Javascript中prototype属性的详解 这篇文章中,详细介绍了构造函数的缺点以及原型(prototype),原型链(prototype chain),构造函数(constructor) ...

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

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

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

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

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

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

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

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

  8. 深入理解Javascript中构造函数和原型对象的区别(转存)

    Object是构造函数,而Object.prototype是构造函数的原型对象.构造函数自身的属性和方法无法被共享,而原型对象的属性和方法可以被所有实例对象所共享. 首先,我们知道,构造函数是生成对象 ...

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

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

随机推荐

  1. win7桌面鼠标右键过慢的解决方案

    由于Intel显卡驱动在桌面右键的加载项造成.解决方案:清理注册表中桌面右键加载项,点击开始,输入regedit,找到HKEY_CLASSES_ROOT\Directory\Background\sh ...

  2. 从程序员角度看ELF

    原文:http://xcd.blog.techweb.com.cn/archives/222.html 特殊说明(by jfo) 对于static-linked或shared-linked的ELF可执 ...

  3. 《深度学习原理与TensorFlow实践》喻俨,莫瑜

    1. 深度学习简介 2. TensorFlow系统介绍 3. Hello TensorFlow 4. CNN看懂世界 5. RNN能说会道 6. CNN LSTM看图说话 7. 损失函数与优化算法 T ...

  4. 设计模式04: Factory Methord 工厂方法模式(创建型模式)

    Factory Methord 工厂方法模式(创建型模式) 从耦合关系谈起耦合关系直接决定着软件面对变化时的行为 -模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之变更 -模块与模块之间的 ...

  5. c++基础知识篇:指针

    从面试的反馈来看,这部分可以问的很难. 1.指针与引用的区别 指针是一个变量,用来存放地址的变量.引用是原来变量的存储空间的别名.   2.指针作为参数的要点 a.需要进行指针的合法性检验,防止空指针 ...

  6. arcconf工具相关命令V1.0

    arcconf工具相关命令V1.0 清除当前所有raid配置 Arcconf  delete  1  array  all       #删除所有逻辑盘 Arcconf  uninit  1  all ...

  7. 21天学通C++学习笔记(二):C++程序的组成部分

    1. 预处理器编译指令 预处理器是一个在编译前运行的工具. 预处理器编译指令是向预处理器发出的命令,总是以磅字符#大头. #include让预处理器获取指定文件并将它们放在编译指令所处的位置.#inc ...

  8. 0xC015000F:正被停用的激活上下文不是最近激活的

    项目程序运行的时候,突然出现这个错误,调用堆栈中的函数,没有一个是自己写的,非常困惑. 在网上搜索了一下,先找到一个提示,可以在CApp::InitInstance()中禁用ActivationCon ...

  9. map/fileter

    一.生成器,generator,节省内存,但是增加了CPU的计算时间 (下节课讲函数怎么变成生成器) 每次循环的时候,就按照这个规则(自己定义的逻辑)去生成一个数据. res = [ 'a','1' ...

  10. Django 项目重命名

    在日常学习工作过程中,我们难免需要复用以前的项目,这里讲下复用 Django 项目并重命名的过程. 1.修改项目名称,使用 pycharm -> refactor 重命名整个项目. 2.修改 m ...