`

Javascript的new

阅读更多

       这几天跟几个同事聊天发现他们对javascript什么时候该用new都不是很了解,这和我上篇博文的new干了什么可以呼应吧。

       1、为什么javascript会这样,会导致很多人都不知道function什么时候该new什么时候不该new?

       2、到底什么时候该用new?

 

答:

1、javascript的function什么时候该new什么时候不该new?我觉得主要的问题还是集中在javascript的弱类型上面。首先我们知道new是干什么,是在创造对象。是的,不管是java还是.net。他是在创建一个对象,new的后面是什么,(java和.net)一般是被一个class修饰的类名称。那么javascript没有严格的类的概念,但其实他们的new也都是在创建对象。java和.net在new的时候都调用了构造函数,那么我们是不是可以认为javascript可以new的函数就称为构造函数吧。但是由于javascript是弱类型,他没有class修饰,没有是否有返回值修饰,只有一个function。所以一个function是否是构造函数很难通过函数头知道,而且既然他是弱类型,他们可以根据内部的条件选择到底是做构造函数用,还是做普通函数用。再加上我们很多程序员都是其他语言出身,很少有人系统的学习了javascript,所以就很混淆。

2、我觉得可以看看我前一篇博文,new到底干了什么。OK看下面这段代码结合说明一下。

	function Hello() {
		this.a = '123';
		this.b = function () {
			alert('b');
		}

		return this;
	}

	Hello.prototype.c = function() {
		alert('c');
	}
	var aHello = new Hello();
	var bHello = Hello();
	alert(aHello.a)
	alert(bHello.a)
	aHello.b();
	bHello.b();
	aHello.c();
	bHello.c();

 

你会发现bHello.c()是执行不了的。在看看上面的函数,他为什么既能new又能不new。你没有办法因为他是弱类型语言,我return this所以我既可以new也可以不new。从上可以看出function内部肯定是有个this这个空间的,然后就是看new干了什么,new就是在执行结束之后又把this.prototype = 函数.prototype(当然这个你是直接赋值不了的,原因自己了解吧)然后把this给了引用(不需要return),而不 new就是把this直接给了引用并没有 new的那个动作。所以bHello虽然也拿到了this(return this)但是没有拿到prototype(他的prototype是object这个有兴趣自己想想)。所以什么时候new还是不new要看看具体情况吧,首先你要去了解new干了什么,之后到底new不new就很容易理解了。因为javascript是弱类型语言你无法通过只有function修饰的函数头来了解一个函数到底是要干什么,所以函数构造者的必要注释是重要的。

      

分享到:
评论

相关推荐

    javascript new 需不需要继续使用.docx

    ### JavaScript中的`new`操作符是否仍需使用? 在探讨`new`操作符在现代JavaScript开发中的使用情况之前,我们先来明确一下`new`的基本功能。`new`操作符主要用于实例化对象,通过调用构造函数来创建一个新的对象...

    javascript new fun的执行过程

    (1)创建一个新的对象,并让this指针指向它; (2)将函数的prototype对象的所有成员都赋给这个新对象; (3)执行函数体,对这个...} var nn=new BB(“cc”); //var nn={};BB.apply(nn) //nn=BB.prototype; alert

    Qt5与Javascript交互

    new QWebChannel(qt.webChannelTransport, function(channel) { var myObject = channel.objects.myObject; myObject.doSomething(); }); ``` 在这个过程中,VS2013作为开发环境,提供了对Qt的支持,包括项目配置...

    javascript new一个对象的实质

    当我们使用JavaScript的new关键字来创建一个对象的时候,实际上是在进行一个特殊的函数调用,这个过程的实质包括以下几个关键步骤: 1. 创建新对象:当我们使用new操作符和构造函数时,JavaScript首先会创建一个新...

    javascript new 需不需要继续使用

    JavaScript中的`new`关键字是用来创建对象实例的,它在某些情况下是必要的,但在其他情况下则可以避免使用。在讨论是否需要继续使用`new`时,我们需要理解它的作用以及何时使用更简洁的替代方法。 首先,`new`...

    网络编程基础篇之JavaScript

    JavaScript,作为全球最广泛使用的脚本语言之一,是网络编程中的基石,特别是在前端开发领域扮演着至关重要的角色。本文将深入探讨JavaScript在网络编程中的基础知识,包括它的起源、基本语法、DOM操作、AJAX异步...

    详解javascript new的运行机制

    在JavaScript中,new运算符是一个非常重要的概念,它用于创建一个实例对象。要理解JavaScript中new的运行机制,首先需要了解JavaScript中函数、原型、原型链、this等基础知识。 首先,JavaScript中函数不仅仅可以被...

    实现QObject与JavaScript通讯

    在Qt框架中,结合QWebEngine和QWebChannel技术,我们可以实现QObject与JavaScript之间的通信,这对于构建富客户端应用或者在Web环境中使用C++组件时非常有用。本文将深入探讨这一主题,详细介绍如何设置和实现这样的...

    javascript经典特效---打开窗口设置.rar

    JavaScript是一种广泛应用于网页和网络应用的编程语言,尤其在实现客户端的动态效果和交互方面具有重要作用。本资源“javascript经典特效---打开窗口设置.rar”主要关注的是如何利用JavaScript技术来控制浏览器窗口...

    JavaScript new对象的四个过程实例浅析

    在JavaScript中,`new`操作符是用来创建新对象并初始化它们的关键字。当我们使用`new`来调用一个构造函数时,实际上会经历四个主要步骤。以下是对这些过程的详细解释: 1. **创建一个空对象** `new`操作首先会在...

    日期,时间格式,年月日时分秒星期JAVAScript代码

    JavaScript 提供了丰富的 API 来处理日期和时间。在本例中,主要使用了 `Date` 对象来获取当前的系统日期和时间,并通过 `toLocaleString()` 方法将其格式化为本地日期和时间字符串。 #### 1.1 创建 Date 对象 ```...

    javaScript 生成DOM 对象(html标签).rar

    JavaScript通过DOM API提供了一系列方法和属性,让我们能够创建、查找、修改和删除这些节点。 生成DOM对象主要有两种方式:一是使用`document.createElement()`方法,二是利用innerHTML属性。`document....

    javascript new后的constructor属性

    var b=new BB();这时b是对象有了BB的的属性prototype所指向的prototype对象;prototype对象有constructor属性指向BB这个函数;所以alert(b.constructor==BB.prototype.constructor) //true 这里的“有了”的...

    Javascript new关键字的玄机 以及其它

    JavaScript中的new关键字是一个非常重要的概念,尤其对于初学者来说理解new关键字的行为是掌握JavaScript原型继承和面向对象编程的基础。在ECMAScript标准中,new关键字的使用会涉及到对象的构造过程,这一过程包含...

Global site tag (gtag.js) - Google Analytics