new运算符 能根据需求来创建对象的实例 通过与构造函数和一系列初始化过程中使用的可选参数来创建对象的实例,对象创建完成后,新创建的对象继承自构造函数的原型

        function Person(name) {
this.name = name;
}
Person.prototype.say = function() {
return this.name;
}
var person = new Person("haha");
console.log(person.say()); //haha

上面是我们比较常用的使用new + 构造函数的场景  让我们看看new 在这里面都做了什么

(1)创建了一个对象字面量{}

(2)将新创建的对象的构造函数链接到函数person上  也就是绑定this     通过查看person.constructor就能看出来 执行构造函数  这样就将构造函数上创建的属性和方法添加到新创建的对象上了

(3)将新创建对象的原型链接到构造函数的prototype上

(4)根据传入的参数,对对象的属性进行赋值  返回创建的对象 this

也就是我们可以这样的理解上面这个过程

        var person = {};  //创建一个空的对象
person.__proto__ = Person.prototype; //继承构造函数的原型
person.name = "haha"; //根据传入的参数实例化属性
console.log(person.say()); //'haha'

上面模拟new + 构造函数的模式

有几个需要注意的问题

当我们继承了构造函数的原型对象的时候 你仍然可以通过在构造函数的原型对象上添加属性和方法

        function Person(name) {
this.name = name;
}
Person.prototype.say = function() {
return this.name;
} var person = new Person("haha");
console.log(person.say());//haha
Person.prototype.test = 1;
console.log(person.test);//1

注意这里是一种浅拷贝 当我们修改试图修改构造函数原型上的属性的时候,其实是在相应的对象上新创建了一个属性,覆盖了原型对象上的属性,并且当我们删除自身的属性的时候,仍然访问到构造函数原型的属性

        var person1 = new Person("1");
var person2 = new Person("2");
Person.prototype.test = [1,2]; //在构造函数的原型对象上添加属性
console.log(person1.test); //[1,2] person1.test = [1,2,3];  
console.log(person1.test);//[1,2,3] 访问的是对象自身的test属性
console.log(person1.__proto__.test); // [1,2] 访问够构造函数原型的test属性
console.log(person2.test); //[1,2] 构造函数原型的test属性
delete person1.test;
console.log(person1.test); // [1,2] 删除自身test的属性 就恢复了对构造函数原型对象的属性的访问 (原型链的查找)

如果我们在这样使用一个构造函数呢  var person = Person()

这是执行构造函数的this执行的就不是我们新创建的构造函数了 而是window 创建的属性也是在windwo上   具体的解释请看我的另一篇文章

http://www.cnblogs.com/tiantianwaigong/p/4543428.html  面试遇到的问题的第四题

最近又看了园内博友的一篇文章  http://www.cnblogs.com/xxcanghai/p/5189353.html   里面涉及都new的优先级的问题  大家可以去好好了解下

new 小记的更多相关文章

  1. [原]Paste.deploy 与 WSGI, keystone 小记

    Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...

  2. MySql 小记

    MySql  简单 小记 以备查看 1.sql概述 1.什么是sql? 2.sql发展过程? 3.sql标准与方言的关系? 4.常用数据库? 5.MySql数据库安装? 2.关键概念 表结构----- ...

  3. Git小记

    Git简~介 Git是一个分布式版本控制系统,其他的版本控制系统我只用过SVN,但用的时间不长.大家都知道,分布式的好处多多,而且分布式已经包含了集中式的几乎所有功能.Linus创造Git的传奇经历就 ...

  4. 广州PostgreSQL用户会技术交流会小记 2015-9-19

    广州PostgreSQL用户会技术交流会小记 2015-9-19 今天去了广州PostgreSQL用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用PostgreSQL-X2 ...

  5. 东哥读书小记 之 《MacTalk人生元编程》

         一直以来的自我感觉:自己是个记性偏弱的人.反正从小读书就喜欢做笔记(可自己的字写得巨丑无比,尼玛不科学呀),抄书这事儿真的就常发生俺的身上. 因为那时经常要背诵课文之类,反正为了怕自己忘记, ...

  6. Paypal支付小记

    Paypal支付小记 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !impo ...

  7. linux 下cmake 编译 ,调用,调试 poco 1.6.0 小记

    上篇文章 小记了: 关于 Poco::TCPServer框架 (windows 下使用的是 select模型) 学习笔记. http://www.cnblogs.com/bleachli/p/4352 ...

  8. mongodb入门学习小记

    Mongodb 简单入门(个人学习小记) 1.安装并注册成服务:(示例) E:\DevTools\mongodb3.2.6\bin>mongod.exe --bind_ip 127.0.0.1 ...

  9. 【日常小记】统计后缀名为.cc、.c、.h的文件数【转】

    转自:http://www.cnblogs.com/skynet/archive/2011/03/29/1998970.html 在项目开发时,有时候想知道源码文件中有多少后缀名为.cc..c..h的 ...

  10. ulua 路径小记 以及 lua require 机制整理

    ulua 路径小记 在学习ulua时,require模块的根路径可以为项目的Lua文件夹或者ToLua文件夹(Editor下),但是在package.path和package.cpath中并没有看到当 ...

随机推荐

  1. 锁屏上显示Activity

    在Android中,有些比较强的提醒,需要用户紧急处理的内容.需要唤醒屏幕,甚至在锁定屏幕的情况下,也要显示出来.例如,来电界面和闹钟提醒界面.这是怎样实现的呢? 其实,实现起来非常简单.只要给Act ...

  2. Oracle数据库入门——初级系列教程

  3. java之源码路径及api

    jav源码地址:D:\Program Files\jdk1.7\src.zip class类地址:D:\Program Files\jdk1.7\jre\lib\rt.jar 在线api底地址:htt ...

  4. 写给已有编程经验的 Python 初学者的总结

    当我开始学习Python的时候,有些事我希望我一早就知道.我花费了很多时间才学会这些东西.我想要把这些重点都编纂到一篇文章当中.这篇文章的目标读者,是刚刚开始学习Python语言的有经验的程序员,想要 ...

  5. IOS的启动画面的适配问题

    iPhone4,iPhone4s 分辨率960*640 长宽比1.5iPhone5,iPhone5s 分辨率1136*640 长宽比1.775iPhone6 分辨率1334*750 长宽比1.778i ...

  6. 【原创】试用十天被Pass所带来的启示

    试用十天被Pass所带来的启示   招聘是门学问,很多人在研究,也有很多方案,不过面对人员难聘问题,很多方法又不灵了.于是我们采用了降低标准方案,扩招进来一些人员,于是问题又来了,想不想听我亲身经历的 ...

  7. java正则表达式小练习(IP地址检测、排序,叠词的处理,邮件地址的获取)

    import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; import java.util.reg ...

  8. HTML5开发手机项目—个人总结

    让网页的宽度自适应屏幕<meta name="viewport" content="width=device-width"/>   1)html上加 ...

  9. node log4js包

    http://blog.csdn.net/heiantianshi1/article/details/43984601

  10. 浅谈DOM性能考虑

    浅谈DOM性能考虑 很多人都会忽视脚本对Web应用整体性能的影响.为保证应用的流畅运行,在为文档编写和应用脚本时,需要注意一些问题.一.尽量减少访问DOM和尽量减少标记    访问DOM的方式对脚本性 ...