`

new到底new出了什么

阅读更多
犀牛书9.1写道:

The new operator must be followed by a function invocation. It creates a new object, with no properties and then invokes the function, passing the new object as the value of the this keyword. A function designed to be used with the new operator is called a constructor function or simply a constructor. A constructor's job is to initialize a newly created object, setting any properties that need to be set before the object is used.

可以看到,javascript里的new和java里的new区别还是很大的,不要理解成同一个东西就对了。

实际上,任何function都可以跟在new后面,比如说:
function test() {
    var o = new Con("hello 2011");
}

function Con(msg) {
    alert("this is the message: " + msg);
}

虽然Con的本意并不是一个构造函数,但是在语法上却是没有错误的。执行test()函数,实际上就是先创建了一个普通的Object,然后执行Con()函数而已。不过这个时候Con()函数被视为Object的一个方法,相当于o.Con(msg)。所以这个时候函数体内的this就是o。(当然上面的例子里,函数体内并没有this)
分享到:
评论

相关推荐

    C语言头文件 NEW.H

    C语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 ...

    C语言头文件 NEW C语言头文件 NEW

    C语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言...

    new操作符(new operator)和operator new的区别

    在C++编程中,`new`操作符和`operator new`是两个密切相关但不完全相同的概念,它们在内存管理和对象创建方面各自承担着特定的角色。 `new`操作符是C++语言内置的关键字,用于在堆上动态分配内存并创建对象。当执行...

    New Report New Report New Report

    New Report New Report New Report New Report

    new关键字和newInstance() 的区分

    Java 中 new 关键字和 newInstance() 的区分 Java 中的 new 关键字和 newInstance() 方法都是用于创建对象的,但是它们之间有着本质的区别。理解这两者的区别对于 Java 编程尤其重要。 首先,new 关键字是 Java 的...

    Malloc和new区别

    ### Malloc和New的区别 #### 一、基本概念与功能 **Malloc** 与 **Free** 是 C/C++ 语言中的标准库函数,主要用于动态内存的分配与释放。这两个函数定义在 `<cstdlib>`(或 `<malloc.h>`)库中。 **New** 与 **...

    c语言中new_C++的new归纳详解

    C++ 中的 new 归纳详解 C++ 中的 new 是一个关键字,同时也是操作符。new 的过程可以分为三步:获得一块内存空间、调用构造函数、返回正确的指针。在 C++ 中,new 可以分为三种形态:new operator、operator new、...

    C++中new/delete与new[]/delete[]的使用区别

    3. **异常安全**:在可能抛出异常的代码块中分配内存时,使用`try-catch`块,并在`catch`块中释放内存,防止因异常导致的内存泄漏。 4. **避免裸指针**:尽可能使用容器(如`std::vector`、`std::array`等)代替裸...

    编程字体 consola 和 courier new

    Consola的字形圆润,字符间的间距适中,使得代码在编辑器中呈现出清晰易读的效果。此外,Consola对数字和符号的处理也相当精细,确保了代码的可读性,尤其是在编写涉及到大量数字和特殊字符的程序时。 相比之下,...

    60个new图标动态gif

    其中,“60个new图标动态gif”是专为网页设计师提供的一套资源,包含了60个与“new”相关的动态GIF图标,这些图标可用于网站或应用的多处,以突出显示更新、新闻或新功能等。 动态GIF格式的普及,得益于其独特的...

    system.new.dat.br和system.new.dat解包工具

    在Android系统中,"system.new.dat.br" 和 "system.new.dat" 文件是刷机过程中常见的文件格式,尤其在MIUI等定制系统中尤为常见。这些文件通常包含系统的核心组件和应用,是Android设备升级或恢复时的重要部分。本文...

    c++中new的三种用法详细解析

    如果分配失败,`plain new`会抛出一个`std::bad_alloc`异常。例如: ```cpp void* operator new(std::size_t) throw(std::bad_alloc); void operator delete(void*) throw(); ``` 在尝试分配大量内存导致失败时...

    重载new 用法例子

    4. **考虑异常安全**:重载的`new`应处理可能抛出的异常,例如当内存不足时。通常,应该在分配失败时抛出`std::bad_alloc`异常。 5. **大小对齐**:确保重载的`new`能够处理对象的大小对齐需求,因为不同的类型可能...

    用new创建对象和直接定义的区别

    5. **异常处理**:`new`操作可能会抛出内存不足异常,而直接定义的对象不会面临这个问题(除非栈内存溢出)。 6. **内存泄漏**:忘记删除`new`创建的对象可能导致内存泄漏,而栈对象不存在这个问题。 总的来说,...

    java中 new date() 打印出的时间与系统时间错了八小时的解决方法

    如果你所在的时区与UTC有八小时的差异,如在中国,那么不考虑时区的情况下,`new Date()` 打印出的时间就会比系统时间晚8小时。 解决这个问题的方法主要有两种: 1. **设置Java虚拟机(JVM)时区**: 在启动Java...

    ucwap new for new

    ucwap new for new

    程序最多能new多少内存

    程序最多能new多少内存 程序最多能new多少内存是一个非常重要的问题。在Windows操作系统中,每个程序最多只有4G的虚拟内存,其中2G虚拟内存提供给系统用,另外2G的内存留给用户使用。对于用户来说,2G的内存是非常...

    Times New Roman.TTF.rar

    《深入解析Times New Roman字体家族》 在计算机世界中,字体是信息呈现的重要元素,它不仅关乎文字的可读性,更在很大程度上影响着视觉效果和阅读体验。Times New Roman,作为全球最广泛使用的西文印刷字体之一,其...

    谷歌 new tab redirect插件

    首先,我们要了解什么是浏览器插件。浏览器插件是增强浏览器功能的小型软件,它们可以添加到浏览器中,以提供额外的服务或改善用户体验。在谷歌浏览器中,这些插件通常以CRX文件的形式存在,如“New Tab Redirect ...

    SYSTEM.NEW.DAT解包工具(可解5.0-8.0系统)

    在Android系统中,`SYSTEM.NEW.DAT`是一个重要的系统文件,它包含了系统的各种核心组件、设置和应用程序。这个文件通常是经过打包处理的,以便于在设备上高效地存储和分发。本文将深入探讨`SYSTEM.NEW.DAT`的结构、...

Global site tag (gtag.js) - Google Analytics