`
yxc_gdut
  • 浏览: 97582 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

js new 操作符

阅读更多

    今天验证了下js 的 new操作符,我们使用new的时候,js编译器做了什么?

   

    以下是测试代码:

<!DOCTYPE HTML>
<html>
  <head>
    <title>new operator</title>
    <meta http-equiv="content-type" content="text/html; charset=GB2312">
  </head>
  <body>
	<script>
		console.group("new 操作 js解析器具体做了什么?");
		var global;
		var Person = function(name){
			this.name = name;
			console.log("执行Person函数");
			global = this;//记录this指针
		}
		console.assert(Person.prototype.constructor === Person);//constructor属性在Person被定义的时候已经确定,new操作并没有设置constructor
		proto = {
			age:10,
			class:3
		}
		Person.prototype = proto;
		
		var p = new Person();
		
		global===p && console.log("1、执行Person函数时候,this指向新建对象");
		p.__proto__ === Person.prototype && console.log("2、将Person的prototype赋值给新对象的__proto__属性");
		global===p && console.log("3、返回this对象,如果Person有自己的返回对象(即 return x ),如果x不为基本数据类型,则返回x而不是this对象");
		
		//__proto__属性是浏览器内部属性,用于原形链,对象的原形链就是通过这个属性连接的
		//__proto__属性,对程序开发透明,部分浏览器允许访问
		//如果浏览器禁止访问__proto__属性,可以为proto加个属性,看p前后变化就知道 p.__proto__是否指向Person.prototype
		//console.log("p.addr",p.addr);//undefined
		//proto.addr = "load";
		//console.log("p.addr",p.addr);//load
		console.groupEnd("new 操作 js解析器具体做了什么?");
	</script>
  </body>
</html>

 

以下是运行结果:


 

当我们new一个对象的时候 js编译器做了一下操作
	
    1、创建一个新的o 将Person的prototype对象复制给o
    2、调用构造函数,this指向o 如 var returnObject = constructor.apply(o,arguments)
    3、如果returnObject是一个对象 返回returnObject,否则返回object

 


 

  • 大小: 37.7 KB
0
1
分享到:
评论

相关推荐

    详解JavaScript中new操作符的解析和实现

    在JavaScript中,`new`操作符是一个至关重要的构造机制,它用于创建对象实例并初始化这些实例。当我们使用`new`操作符调用一个函数时,实际上是在执行一系列步骤来构建一个新对象并设置其属性和方法。以下是`new`...

    面试第二题 new 操作符 具体干了什么?

    JavaScript new操作符具体干了什么呢? 在javascript 只要new 一个函数,就可以new一个对象,这应该算是JavaScript中函数式编程思想,这里主要说明的是 在new的过程中发生了什么? 1.具体主要有4个部分: 1.创建了一...

    【JavaScript源代码】JavaScript中new操作符的原理示例详解.docx

    在JavaScript中,`new`操作符是一个至关重要的概念,它用于通过构造函数创建新的对象实例。构造函数是一种特殊类型的函数,通常用来初始化新创建的对象。接下来我们将深入探讨`new`操作符的工作原理,并通过示例进行...

    js代码-new操作符

    在JavaScript中,`new`操作符是一个至关重要的概念,它用于创建对象实例。当我们使用`new`关键字调用一个函数时,实际上是在执行一个构造函数,这个构造函数会返回一个新的对象实例。理解`new`操作符的工作原理对于...

    用方法封装javascript的new操作符(一)

    JavaScript是一种基于对象的语言,其中`new`操作符是创建对象实例的关键部分。它允许我们创建一个新对象并将其与特定的函数(也称为构造函数)关联起来,该函数定义了对象的行为和属性。在JavaScript中,`new`操作符...

    js代码-手动实现 new 操作符

    在JavaScript中,`new`操作符是一个至关重要的概念,它用于创建对象实例并执行构造函数。手动实现`new`操作符的过程,可以帮助我们更深入地理解JavaScript中的对象创建机制。以下将详细介绍`new`操作符的工作原理...

    JavaScript中的比较操作符&gt;、&lt;、&gt;=、&lt;=介绍

    在JavaScript编程语言中,比较操作符是比较两个变量或表达式的值并返回一个布尔值(true或false)的运算符。JavaScript中常用的比较操作符包括大于(&gt;)、小于(&lt;)、大于等于(&gt;=)、小于等于()。这些操作符可以...

    JS使用new操作符创建对象的方法分析

    本文实例讲述了JS使用new操作符创建对象的方法。分享给大家供大家参考,具体如下: 在编写js代码时,我们有时会需要使用函数来模拟java中的类,并用它来产生对象,在定义了一个构造函数之后我们需要使用new操作符来...

    浅谈javascript中new操作符的原理

    在JavaScript中,`new`操作符是用于创建对象并执行构造函数的关键字。它的工作原理虽然看似简单,但深入了解后会发现其背后的机制相当有趣且重要。本文将深入探讨`new`操作符的内部机制。 首先,`new`操作符的主要...

    js中new一个对象的过程

    此外,也需要注意,尽管new操作符在JavaScript中非常强大,但在ES6以后,也出现了class关键字,这是一种更加现代和面向对象的语法糖,它为JavaScript添加了类似其他面向对象语言中的类的实现。尽管class关键字提供了...

    js代码-实现new操作符

    // 使用自定义的new操作符 var instance = myNew(MyConstructor, arg1, arg2); ``` 在上面的`myNew`函数中,我们模拟了`new`操作符的行为。如果构造函数返回了一个对象,那么`new`操作符通常会返回这个对象;否则,...

    JavaScript展开操作符(Spread operator)详解.docx

    JavaScript的展开操作符,也称为散列操作符或三点运算符(...),是一个非常强大的工具,它在ES6(ECMAScript 2015)中被引入,极大地提升了编程的灵活性。展开操作符主要应用于以下几个方面: 1. **数组操作**: ...

    JS重学系列之聊聊new操作符

    在JavaScript中,`new`操作符是用来创建对象的,它有四个主要步骤: 1. **创建新对象**:`new`首先会在内存中创建一个新的、空的对象。 2. **设置原型链**:新创建的对象的原型(`__proto__`)被设置为构造函数的`...

Global site tag (gtag.js) - Google Analytics