首先上一一个简单的 new 操作符实例

  1. var Person = function(name){
  2. this.name = name;
  3. this.say = function(){
  4. return "I am " + this.name;
  5. };
  6. }
  7. var nyf = new Person("nyf");
  8. nyf.say();
 

简单来说,上述例子中,以 new 操作符调用构造函数的时候,函数内部发生以下变化:

  1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
  2、属性和方法被加入到 this 引用的对象中。
  3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。
 
以上情况在 new 操作符调用下,后台就相当于 

  1. var Person = function(name){
  2. //var this = {};
  3. this.name = name;
  4. this.say = function(){
  5. return "I am " + this.name;
  6. };
  7. //return this;
  8. }

对于以上的讲述不知道有没有讲清楚。

 

  1. var obj = new Base();

相当于运行以下代码

  1. var obj = {};
  2. obj.__proto__ = Base.prototype;
  3. Base.call(obj);

对于ES5中添加了 Object.create(),

  1. if(typeof Object.create !== "function"){
  2. Object.create = function(o){
  3. function F(){};
  4. F.prototype = o;
  5. return new F();
  6. }
  7. }
http://blog.chinaunix.net/uid-26672038-id-3366869.html

JS中的 new 操作符简单理解的更多相关文章

  1. js中的回调函数的理解和使用方法

    js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...

  2. js中的new操作符与Object.create()的作用与区别

    js中的new操作符与Object.create()的作用与区别 https://blog.csdn.net/mht1829/article/details/76785231 2017年08月06日 ...

  3. C#中事件流程的简单理解

    C#中事件流程的简单理解 C#中事件基于委托,要理解事件要先理解委托,但是现在我还没想好怎么写委托,如果不懂委托可以先找找委托的文章 事件基于委托,为委托提供了一种发布/订阅机制 一上来就是这句话,很 ...

  4. JavaScript中this指向的简单理解

    首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...

  5. js中的闭包之我理解

    闭包是一个比较抽象的概念,尤其是对js新手来说.书上的解释实在是比较晦涩,对我来说也是一样. 但是他也是js能力提升中无法绕过的一环,几乎每次面试必问的问题,因为在回答的时候.你的答案的深度,对术语的 ...

  6. JS中的new操作符

    在JS中定义一个构造函数,然后用new操作符构造对象obj,JS代码如下. function Base(){ this.name = "swf"; this.age =20; } ...

  7. JS中的一元操作符

    表达式 一元操作符 优先级 结合性 运算顺序 表达式是什么? 就是JS 中的一个短语,解释器遇到这个短语以后会把对它进行计算,得到一个结果参与运算,我们把这种要参与到运算中的各种各样的短语称为表达式. ...

  8. JS 中 call 和 apply 的理解和使用

    本文受到了知乎问题 如何理解和熟练运用js中的call及apply? 的启发. obj.call(thisObj, arg1, arg2, ...); obj.apply(thisObj, [arg1 ...

  9. js中prototype,constructor的理解

    连看4篇前辈的文章,记录一些知识点 Javascript继承机制的设计思想 Javascript 面向对象编程(一):封装 Javascript面向对象编程(二):构造函数的继承 Javascript ...

随机推荐

  1. 第二章 spring

    一.Bean作用域 spring容器创建的时候,会将所有配置的bean对象创建出来,默认bean都是单例的.代码通过getBean()方法从容器获取指定的bean实例,容器首先会调用Bean类的无参构 ...

  2. Dialog详解(包括进度条、PopupWindow、自定义view、自定义样式的对话框)

    Dialog详解(包括进度条.PopupWindow.自定义view.自定义样式的对话框)   Android中提供了多种对话框,在实际应用中我们可能会需要修改这些已有的对话框.本实例就是从实际出发, ...

  3. .net session_end

    在做asp.net编程开发的时候,我遇见这样的问题,一个用户只能在一台机器上登录, 如果有用户在其他机器上登录,系统将提示该用户已经登录!当前登陆非法!我的做法是: 用Application变量保存已 ...

  4. 简单了解ICMP协议

    ping命令是什么协议? 维基百科: ping是一种电脑网络工具,用来测试数据包能否通过IP协议到达特定主机.ping的运作原理是向目标主机传出一个ICMP echo@要求数据包,并等待接受echo回 ...

  5. SharePoint 2013常用开发工具分享

    众所周知,一款好的开发工具不仅能提高项目开发效率,而且能够协助开发人员简化开发流程.本文汇总几款SharePoint 2013开发常用开发工具,希望能够对大家有所帮助.如果您有更好的工具,没有包含在本 ...

  6. Binder理解

    native takepicture -> camera -> ICamera: class bpbinder: transact -> BpBinder: transact -&g ...

  7. tomcat7配置虚拟目录

    1.tomcat7的安装路径下,D:\Program Files\java\Tomcat 7.0\conf,修改server.xml文件,如图: 在</Host>标签前,添加上图选中部分即 ...

  8. md5和SHA校验码

    md5已经不安全了,中国山东大学女学霸王小云破解了一系列密码,当真是巾帼不让须眉.说是破解,其实就是给你一个md5码,让你求出这个md5码所对应的原始信息,显然一个md5对应无数种原始信息.而md5的 ...

  9. datatable刷新表头

    使用jQuery的datatable生成表格数据,当需要改变表头时,调用Table.fnDestroy();再重新创建表头 var oTable = null; function initSettin ...

  10. 篇一:MySQL中case when then

    图一: 图二: