首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

模拟实现 new 操作符(js)

所以,在 js 中,new 操作符,其实可以通俗的理解成一个辅助工具,用来辅助函数构造出一个新对象。所以,我们才能够来模拟实现它,因为它其实通俗理解,就是一个工具函数。...得先明确这点,才能知道,的确是可以模拟 new 操作符的。...new 操作符其实就是做了几件事: 创建一个继承自 A.prototype 的空对象 让空对象作为函数 A 的上下文,并调用 A 返回这个空对象 这是基本的 new 使用的场景,那么我们要来模拟实现的话...并没有 要模拟实现一个完整的 new 操作符,就还得将它的其他使用场景都考虑进去: 当构造函数有返回值时 判断一个函数是否能够作为构造函数使用 先来考虑第一种: function A() { this.a...——(来自于MDN) 其实这句解释就把 new 操作符的所有职责或者说所有使用场景覆盖了: 用户定义的对象类型 ==> 当构造函数有返回值时 具有构造函数的内置对象 ==> 当前函数可用来作为构造函数,

3.5K10

深入理解New操作

前言 当我们对函数进行实例化时,需要用new操作符来实现。那么,对于它的底层实现原理你是否清楚呢?本文就跟大家分享下它的原理并用一个函数来模拟实现它,欢迎各位感兴趣的开发者阅读本文。...原理分析 我们通过一个具体的例子来看下一个函数在new之后都能做些什么,如下所示: function Person(name, age) { this.name = name; this.age...Person.prototype.printBodyWeight = function() { console.log(this.name + "体重为: " + this.bodyWeight); }; 接下来,我们用new...关键字将Person函数进行实例化,我们发现实例化后,可以访问到: 函数内部的属性 函数原型上的属性 const person = new Person("神奇的程序员", "22"); console.log...我们发现: 只能访问我们在构造函数中所返回的属性 构造函数中声明的其它属性以及挂载在原型上的属性均无法访问 image-20221005160504245 实现思路 经过前面的分析,我们知道了函数在new

26430

JavaScript 构造函数和 new 操作

构造器和操作符 "new" 常规的 {...} 语法允许创建一个对象。但是我们经常需要创建许多类似的对象,例如多个用户或菜单项等。 这可以使用构造函数和 "new" 操作符来实现。...它们只能由 "new" 操作符来执行。...alert(user.name); // Jack alert(user.isAdmin); // false 复制代码 当一个函数被使用 new 操作符执行时,它按照以下步骤: 一个新的空对象被创建并分配给...// 带 "new": new User(); // function User { ... } 复制代码 它可以被用在函数内部,来判断该函数是被通过 new 调用的“构造器模式”,还是没被通过 new...new.target) { // 如果你没有通过 new 运行我 return new User(name); // ……我会给你添加 new } this.name = name;

34830

如何自己实现 JavaScript 的 new 操作符?

前言 new 大家肯定都不陌生,单身没有对象的时候就 new 一个,很方便。那么它在创建实例的时候,具体做了哪些操作呢?今天我们就来一起分析一下。...new 操作符 那么 new 操作符到底做了什么事情呢,可以创建出一个实例? new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。...以上引用自 new 操作符 - MDN 可能第 2、4 步大家看的不是很明白,这里我重新总结一下这 4 个步骤: 创建一个空对象 u = {} 绑定原型,u....知道了 new 操作符的原理,下面我们自己来实现一个 FakeNew 函数。...操作,相信大家以后再看到 new,会有一种通透的感觉了。

41530

剖析new、delete和placement new

前言 new、delete 和 placement new 是 C++ 中的内存管理操作符。 new:用于在堆上动态分配内存并初始化对象。它返回指向新创建对象的指针。...如果传递给 delete 的指针是 nullptr,则不执行任何操作。 placement new:是一种低级的内存分配机制,允许在已经分配的内存上构造对象。...总的来说,new 和 delete 是 C++ 中用于动态内存管理的标准操作符,而 placement new 则提供了一种更底层的内存管理方式,允许在特定内存地址上构造对象。...不同的地方是: malloc和free是函数,new和delete是操作符 malloc申请的空间不会初始化,new可以初始化 malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可...因此写代码时一定要小心,尤其是动态内存操作时,一定要记着释放。但有些情况下总是防不胜防,简单的可以采用上述方式快速定位下。

7310
领券