今天验证了下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
相关推荐
在JavaScript中,`new`操作符是一个至关重要的构造机制,它用于创建对象实例并初始化这些实例。当我们使用`new`操作符调用一个函数时,实际上是在执行一系列步骤来构建一个新对象并设置其属性和方法。以下是`new`...
JavaScript new操作符具体干了什么呢? 在javascript 只要new 一个函数,就可以new一个对象,这应该算是JavaScript中函数式编程思想,这里主要说明的是 在new的过程中发生了什么? 1.具体主要有4个部分: 1.创建了一...
在JavaScript中,`new`操作符是一个至关重要的概念,它用于通过构造函数创建新的对象实例。构造函数是一种特殊类型的函数,通常用来初始化新创建的对象。接下来我们将深入探讨`new`操作符的工作原理,并通过示例进行...
在JavaScript中,`new`操作符是一个至关重要的概念,它用于创建对象实例。当我们使用`new`关键字调用一个函数时,实际上是在执行一个构造函数,这个构造函数会返回一个新的对象实例。理解`new`操作符的工作原理对于...
JavaScript是一种基于对象的语言,其中`new`操作符是创建对象实例的关键部分。它允许我们创建一个新对象并将其与特定的函数(也称为构造函数)关联起来,该函数定义了对象的行为和属性。在JavaScript中,`new`操作符...
在JavaScript中,`new`操作符是一个至关重要的概念,它用于创建对象实例并执行构造函数。手动实现`new`操作符的过程,可以帮助我们更深入地理解JavaScript中的对象创建机制。以下将详细介绍`new`操作符的工作原理...
在JavaScript编程语言中,比较操作符是比较两个变量或表达式的值并返回一个布尔值(true或false)的运算符。JavaScript中常用的比较操作符包括大于(>)、小于(<)、大于等于(>=)、小于等于()。这些操作符可以...
本文实例讲述了JS使用new操作符创建对象的方法。分享给大家供大家参考,具体如下: 在编写js代码时,我们有时会需要使用函数来模拟java中的类,并用它来产生对象,在定义了一个构造函数之后我们需要使用new操作符来...
在JavaScript中,`new`操作符是用于创建对象并执行构造函数的关键字。它的工作原理虽然看似简单,但深入了解后会发现其背后的机制相当有趣且重要。本文将深入探讨`new`操作符的内部机制。 首先,`new`操作符的主要...
此外,也需要注意,尽管new操作符在JavaScript中非常强大,但在ES6以后,也出现了class关键字,这是一种更加现代和面向对象的语法糖,它为JavaScript添加了类似其他面向对象语言中的类的实现。尽管class关键字提供了...
// 使用自定义的new操作符 var instance = myNew(MyConstructor, arg1, arg2); ``` 在上面的`myNew`函数中,我们模拟了`new`操作符的行为。如果构造函数返回了一个对象,那么`new`操作符通常会返回这个对象;否则,...
JavaScript的展开操作符,也称为散列操作符或三点运算符(...),是一个非常强大的工具,它在ES6(ECMAScript 2015)中被引入,极大地提升了编程的灵活性。展开操作符主要应用于以下几个方面: 1. **数组操作**: ...
在JavaScript中,`new`操作符是用来创建对象的,它有四个主要步骤: 1. **创建新对象**:`new`首先会在内存中创建一个新的、空的对象。 2. **设置原型链**:新创建的对象的原型(`__proto__`)被设置为构造函数的`...