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. ping: sendto: Network is unreachable

    在我的板子上ping路由上的IP的时候可以ping通,但是ping外网的IP的时候提示"ping: sendto: Network is unreachable" 后来使用rout ...

  2. Ubuntu 12.10

    上海交通大学更新服务器(教育网千兆接入,联通/电信线路情况不详),包含其他开源镜像: deb http://ftp.sjtu.edu.cn/ubuntu/ quantal main multivers ...

  3. vmware workstation11+centos7+lnmp一键安装包 环境搭建

    vmware workstation11 1.下载:http://pan.baidu.com/s/1gecipOJ 2.安装:直接下一步. centos7 1.下载:网易镜像 http://mirro ...

  4. ruby -- 基础学习(一)项目文件夹说明

    App文件夹子文件夾功能介绍 (1)controllers  存放驱动业务逻辑的控制器 (2)helpers       存放视图辅助类,一些常用的代码段 (3)mailers       Rails ...

  5. 编写高质量JS代码的68个有效方法(二)

    [20141011]编写高质量JS代码的68个有效方法(二) *:first-child { margin-top: 0 !important; } body>*:last-child { ma ...

  6. [Python] Magic editor in Pycharm

    From: http://blog.csdn.net/u013088062/article/details/50249751 From:http://blog.csdn.net/u013088062/ ...

  7. 清除linux缓存命令

    命令 #sync #echo 3 > /proc/sys/vm/drop_caches 查看内存情况: # more /proc/meminfo Kernels 2.6.16 and newer ...

  8. 【转载】如何使用 gnome-screenshot 截图命令

    转载自:http://www.linuxeden.com/html/softuse/20130726/141753.html 日常工作中,我们经常需要截取屏幕状态来给其他人看.一般情况下,我们能最直接 ...

  9. python网络编程socket /socketserver

    提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...

  10. IIS相关问题整理

    1.报错:请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理 解决方案地址:http://blog.csdn.net/canielau/article/details/7609613 2.报错: ...