在javascript中,new操作符随处可见,我讲一下我自己对new操作符的理解。。。

构造函数无返回值

//测试代码
function Foo(name) {
var age = 20;
this.name = name;
} Foo.prototype.getName = function() {
return this.name;
} var foo = new Foo("Jack"); console.log(foo.age); //undefined
console.log(foo.name); //Jack
console.log(foo.getName()); //Jack

new的具体过程(借用大神的代码):

function internalConstructor(parameters ) {
O = new Object(); //new一个空对象
O.[[Class]] = "Object"; //类型是Object //如果F.prototype是Object,O.[[Ptototype]](也就是O.__proto__)为F.prototype,否则为Object.prototype
O.[[Prototype]] = Type(F. prototype) === 'Object' ?
F.prototype : Object.prototype; //在对象O的作用域下,执行F.[[call]] 函数,能够复制构造函数的this属性到实例对象
R = F.[[Call]].apply(O, parameters); //如果R是Object,则返回R,否则返回O,也就是说构造函数存在this相关属性,则返回R,无this相关属性,直接返回O
return Type(R) === 'Object' ? R : O;
}

构造函数存在返回值

1、如果返回(return)一个原始类型(无 return 时其实为return原始类型undefined),那么就返回new创建的匿名对象

//测试代码
function Foo(name) {
var age = 20;
this.name = name;
return 1;
} Foo.prototype.getName = function() {
return this.name;
} var foo = new Foo("Jack"); console.log(foo.age); //undefined
console.log(foo.name); //Jack
console.log(foo.getName()); //Jack

2、只要new表达式之后的构造函数返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象

//测试代码
function Foo(name) {
var age = 20;
this.name = name;
return {};
} Foo.prototype.getName = function() {
return this.name;
} var foo = new Foo("Jack"); console.log(foo); //Object {}
console.log(foo.age); //undefined
console.log(foo.name); //undefined
console.log(foo.getName()); //Uncaught TypeError: foo.getName is not a function

正常的构造函数是没有返回值的,如果有返回值的话,直接执行构造函数获得返回值就行,也就没必要new了。。。。。。。

new操作符做了什么??的更多相关文章

  1. new 操作符 做了什么

    new 操作符 做了什么 new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例. 假设Test是一个构造函数,通常在创建对象的实例时,要使用new,eg:test = new ...

  2. JavaScript下的new操作符做了什么?

    可以参考知乎的一篇文章:https://zhuanlan.zhihu.com/p/23987456 参考网上其他人的文章,new发生了以下操作 参考MDN:https://developer.mozi ...

  3. C#的new操作符到底做了什么

    使用new操作符来创建对象,其背后到底发生了什么? 有一个父类Animal,Dog派生于Animal. class Program { static void Main(string[] args) ...

  4. C# new关键字和对象类型转换(双括号、is操作符、as操作符)

    一.new关键字 CLR要求所有的对象都通过new来创建,代码如下: Object obj=new Object(); 以下是new操作符做的事情 1.计算类型及其所有基类型(一直到System.Ob ...

  5. C++ 中 new 操作符内幕:new operator、operator new、placement new

    一.new 操作符(new operator) 人们有时好像喜欢有益使C++语言的术语难以理解.比方说new操作符(new operator)和operator new的差别. 当你写这种代码: st ...

  6. [c++基础]3/5原则--拷贝构造函数+拷贝赋值操作符

    /* * main.cpp * * Created on: Apr 7, 2016 * Author: lizhen */ #include <iostream> #include &qu ...

  7. LiveScript 操作符

    The LiveScript Book     The LiveScript Book 操作符 数字 标准的数学操作符: 1.1 + 2 # => 32.3 - 4 # => -13.6 ...

  8. 实现一个new操作符

    new 操作符做了这些事: 1.它创建了一个全新的对象: 2.它会被执行[[Prototype]](也就是__proto__)链接: 3.它使this指向新创建的对象: 4.通过new创建的每个对象最 ...

  9. js中的new操作符解析

    new 操作符做了以下事情: 1.创建一个对象,将对象赋值给this function Person(name, age) { console.log(this) //Person {} } let ...

随机推荐

  1. 【转】在.Net中关于AOP的实现

    原文地址:http://www.uml.org.cn/net/201004213.asp 一.AOP实现初步 AOP将软件系统分为两个部分:核心关注点和横切关注点.核心关注点更多的是Domain Lo ...

  2. Solr学习笔记之1、环境搭建

    Solr学习笔记之1.环境搭建 一.下载相关安装包 1.JDK 2.Tomcat 3.Solr 此文所用软件包版本如下: 操作系统:Win7 64位 JDK:jdk-7u25-windows-i586 ...

  3. 2016.04.27,英语,《Vocabulary Builder》Unit 19

    bio, comes from the Greek word for 'life'. biosphere ['baɪoʊsfɪr] n. 生物圈: biology [baɪ'ɑːlədʒi] n. 生 ...

  4. 根据设备宽高动态设置View的大小

    得到设备屏幕宽高: WindowManager wManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); ...

  5. UIButton 去除按下效果(阴影)

    [btn setImage:[UIImage imageNamed:@"test.png"] forState:UIControlStateNormal];btn.adjustsI ...

  6. memcached学习笔记6--浅谈memcached的机制 以及 memcached细节讨论

    附:请浅谈memcached的机制 答: ①基于C/S架构,协议比较简单 c/s架构,此时memcached为服务器端,我们可以使用如PHP,c++/c等程序连接memcached服务器. memca ...

  7. vbaexcel

    Sub WordTest() Dim objwordApp As Word.Application Dim objword As Word.Document Dim objSeheet As Stri ...

  8. 【转】设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)

    设计模式 ( 十五 ) 中介者模式Mediator(对象行为型) 1.概述 在面向对象的软件设计与开发过程中,根据"单一职责原则",我们应该尽量将对象细化,使其只负责或呈现单一的职 ...

  9. C、VDD、VSS、 VEE 和VPP的区别

    http://www.cnblogs.com/crazybingo/archive/2010/05/14/1735802.html C.VDD.VSS. VEE 和VPP的区别 在电子电路中,常可以看 ...

  10. C# 操作Cookie类

    1.Cookie操作类 using System; using System.Data; using System.Configuration;using System.Web;using Syste ...